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: p> Cependant, le C'est ce que je voudrais faire, mais il retourne non défini: p> My HTML looks Comme ceci: p> Qu'est-ce que je manque? p> p> .parent (). Parent () code> Sélecteur est trop fragile - Ça va pause si je change jamais ma structure HTML. p>
4 Réponses :
essayer Les parents () monte dans le arbre jusqu'à ce qu'il correspond au sélecteur p> p>
Je suggérerais:
var listItemId = $(this).parents('tr').data('id');
Cette réponse a principalement travaillé. Si je fais $ (ceci) .Parents ('TR'). ATTR ('Data-ID'); code> Cela fonctionne parfaitement. Une idée de la raison pour laquelle le formulaire .data.id code> ne fonctionnerait pas?
Opps. Ma syntaxe était fausse. Essayez .Data ('id') code> à la place. Cela suppose que vous utilisez JQuery 1.4.3 ou plus.
interne, jQuery utilise .cousest pour ce genre de choses. 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) P> performance sage, ils sont équivalents (chèque < un href = "http://jsperf.com/jquerery-parents-vs-closest/2" rel = "NOREFERRER"> Ce JSPERF ) P> 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) p> dans votre cas: p> ou p> < PRE> XXX PRE> 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). P> Voici un petit violon p> p>
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/...
$(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
$ (ceci) est donné où dans le JavaScript? Être lucide.