12
votes

Rechercher une ligne de parent de formulaire entrée de texte

J'essaie d'utiliser des attributs de données dans une table HTML pour stocker des données sur un élément qui sera utilisé ultérieurement dans un appel AJAX, mais j'ai des problèmes avec ma sélection de jQuery lorsque j'essaie d'obtenir les données out.

Ceci fonctionne: xxx

Cependant, le .parent (). Parent () Sélecteur est trop fragile - Ça va pause si je change jamais ma structure HTML.

C'est ce que je voudrais faire, mais il retourne non défini: xxx

My HTML looks Comme ceci: xxx

Qu'est-ce que je manque?


1 commentaires

$ (ceci) est donné où dans le JavaScript? Être lucide.


4 Réponses :


4
votes

essayer xxx

Les parents () monte dans le arbre jusqu'à ce qu'il correspond au sélecteur


0 commentaires

3
votes

Je suggérerais:

var listItemId = $(this).parents('tr').data('id');


2 commentaires

Cette réponse a principalement travaillé. Si je fais $ (ceci) .Parents ('TR'). ATTR ('Data-ID'); Cela fonctionne parfaitement. Une idée de la raison pour laquelle le formulaire .data.id ne fonctionnerait pas?


Opps. Ma syntaxe était fausse. Essayez .Data ('id') à la place. Cela suppose que vous utilisez JQuery 1.4.3 ou plus.



25
votes

interne, jQuery utilise .cousest pour ce genre de choses. XXX

Si vous avez des tables imbriquées (que je n'ai jamais vu, mais nous ne savons jamais), vous devez sélectionner le premier. 'TR' aussi. (Il est plus utile de chercher des divs que de lignes). Cependant, pour l'unification du code, je n'utilise jamais les parents quand j'ai besoin de plus près. De cette façon, les noms de fonctions impliquent que cela signifie exactement (parent le plus proche), tandis que .Parents () laisse plus de place à interprétation et réduisez ainsi la lisibilité du code (IMO)

performance sage, ils sont équivalents (chèque < un href = "http://jsperf.com/jquerery-parents-vs-closest/2" rel = "NOREFERRER"> Ce JSPERF )

Enfin, vous pouvez envisager un pure javasrcipt Approche aussi: Parentnode (par miles plus rapidement que toute autre chose, si vous avez vraiment besoin d'une vitesse)

dans votre cas: xxx

ou < PRE> XXX

NB: Les méthodes javascript pure ont besoin de HTML valide pour fonctionner, contrairement à celui de votre question (fermez votre étiquette d'entrée et ajoutez une table une).

Voici un petit violon


3 commentaires

Merci pour la réponse détaillée. Je considère que votre point sur l'expression de l'intention. Pourrait opter pour cette route ...


J'utiliserais .Data ('id') au lieu de .Attr ('Data-ID');


Moi aussi, ou parentnode.dataSet.id. Ma meilleure hypothèse est que .Data () était buggy en 2011 ... Yup: Stackoverflow.com/Questtions/5309926/...



0
votes
$(this).closest('tr').attr('data-id');
This will be the best solution for your problem. The code will not be depended on you html structure, unless you introduce new <tr> tag in between

0 commentaires