Recherche de la ligne parent de la saisie de texte de formulaire
Je suis en train d'utiliser des données d'attributs dans une table HTML pour stocker les données sur un élément qui sera utilisée plus tard dans un appel ajax, mais j'ai de la difficulté avec mon jQuery sélection lorsque j'essaie de récupérer les données.
Cela fonctionne:
var listItemId = $(this).parent().parent().attr('data-id');
Cependant, la .parent().parent()
sélecteur est trop fragile--il va casser si jamais je modifier ma structure HTML.
C'est ce que j'aimerais faire, mais il est de retour indéfini:
var listItemId = $(this).parent('.list-item').attr('data-id');
Mon code HTML ressemble à ceci:
<tr class="list-item" data-id="1">
<td>
<input value="Some text entered by the user" type="text" >
</td>
</tr>
Ce qui me manque?
source d'informationauteur Josh Earl
Vous devez vous connecter pour publier un commentaire.
en interne, jquery utilise .le plus proche pour ce genre de trucs.
d'ailleurs si vous avez des tables imbriquées (que je n'ai jamais vu, mais on ne sait jamais), vous devez sélectionner le premier 'tr' trop. (c'est de plus en plus utile à la recherche pour les divs que les lignes). Cependant, pour le code de l'unification, je n'utilise jamais les parents quand j'en ai besoin le plus proche. De cette façon, les noms de fonction implique la signification exactement (le plus proche parent), tandis que .les parents() laisse plus de place à l'interprétation, et donc de réduire la lisibilité du code (omi)
performance sage, ils sont équivalents (vérifier cette jsperf )
enfin, vous pouvez envisager une pure javasrcipt approache trop: parentNode (par miles plus rapidement que toute autre chose, si vous avez vraiment besoin de vitesse)
dans votre cas:
ou
NB: pure méthodes javascript besoin de code html valide pour travailler, contrairement à celle de votre question (à proximité de votre balise d'entrée, et ajouter une table).
voici un peu de violon
essayer
les parents() monte dans l'arbre jusqu'à ce qu'il correspond au sélecteur de
Je dirais:
Le sélecteur de classe est le plus lent de tous les sélecteurs jQuery et devrait être évitée à moins qu'il n'y a pas d'autre moyen d'aller les informations dont vous avez besoin.
Mise à JOUR
J'ai corrigé la syntaxe à utiliser le
.data()
méthode correctement. De cette façon ne fonctionne que dans la version 1.4.3 ou plus.Ce sera la meilleure solution à votre problème. Le code ne sera pas possible de compter sur vous html la structure, à moins que vous introduisez de nouvelles <tr> tag entre