J'ai du HTML comme celui-ci:
<div id="1">
<p>
Volume = <input type="text" />
<button rel="3.93e-6" class="1" type="button">Check answer</button>
</p>
<div></div>
</div>
et certains JS comme ceci:
$("button").click(function () {
var buttonNo = $(this).attr('class');
var correct = Number($(this).attr('rel'));
validate (Number($("#"+buttonNo+" input").val()),correct);
$("#"+buttonNo+" div").html(feedback);
});
Ce que j'aimerais vraiment, c'est que je n'ai pas besoin d'avoir la classe = "1" sur le bouton (je sais que les classes numériques ne sont pas valides, mais c'est un WIP!), Afin que je puisse déterminer buttonNo en fonction de la id de la div parent. Dans la vraie vie, plusieurs sections ressemblent à ceci.
Comment puis-je trouver l'identifiant du div parenting le bouton.
Quelle serait une manière plus sémantique de stocker la réponse dans le code du bouton. Je veux rendre cela aussi infaillible que possible pour un non programmeur de copier et coller sans casser les choses!
1.
2.
Il doit y avoir un grand nombre de façons! L'un pourrait être de cacher un élément qui contient la réponse, par exemple
Et puis avoir un code jQuery similaire à celui ci-dessus pour saisir cela:
gardez à l'esprit que si vous mettez la réponse dans le code client, ils peuvent la voir :) La meilleure façon de le faire est de la valider côté serveur, mais pour une application avec une portée limitée, cela peut ne pas poser de problème.
la source
$(parent[0]).attr('id')
après avoir aimé quelques sélecteurs de parents.Essaye ça:
la source
la source
Pour obtenir l'id du div parent:
En outre, vous pouvez refactoriser votre code un peu:
Désormais, il n'y a plus besoin d'une classe de boutons
explication
eq (0), signifie que vous sélectionnerez un élément de l'objet jQuery, dans ce cas l'élément 0, donc le premier élément. http://docs.jquery.com/Selectors/eq#index
$ (selector) .siblings (siblingsSelector) sélectionnera tous les frères et sœurs (éléments avec le même parent) qui correspondent au siblingsSelector http://docs.jquery.com/Traversing / siblings # expr
$ (selector) .parents (parentsSelector) sélectionnera tous les parents des éléments mis en correspondance par le sélecteur qui correspondent au sélecteur parent. http://docs.jquery.com/Traversing/parents#expr
Ainsi: $ (selector) .parents ('div: eq (0)'); correspondra au premier div parent des éléments mis en correspondance avec le sélecteur.
Vous devriez jeter un œil à la documentation jQuery, en particulier les sélecteurs et la traversée:
la source
http://jsfiddle.net/qVGwh/6/ Vérifiez ceci
la source
Cela peut être facilement fait en faisant:
Vous attachez ceci à n'importe quel objet à l'intérieur d'une table et il vous renverra l'id de cette table.
la source
JQUery a une méthode .parents () pour remonter dans l'arborescence DOM, vous pouvez commencer là.
Si vous êtes intéressé à faire cela d'une manière plus sémantique, je ne pense pas que l'utilisation de l'attribut REL sur un bouton soit la meilleure façon de définir sémantiquement «c'est la réponse» dans votre code. Je recommanderais quelque chose du genre:
et
Je ne sais pas trop comment votre validation et vos commentaires fonctionnent, mais vous comprenez l'idée.
la source
find () et plus proche () semble légèrement plus lent que:
la source
$(this).parent().parent().attr("id");
?