Comment trouver l'élément suivant qui a un attribut ID à l'aide de jQuery
Lorsque je clique sur un lien, j'ai besoin de trouver la prochaine <section>
qui a un attribut ID et le retour de son ID.
Donc le suivant le balisage et le javascript, je m'attends cliquant sur le lien à écrire "section_3" de la console.
<section id="section_1">
<a href="#" class="findNext">Find</a>
</section>
<section></section>
<section id="section_3"></section>
<section id="section_4"></section>
et
$('a.findNext').click(function() {
var nextSectionWithId = $(this).closest("section").next("section[id]");
if (nextSectionWithId) {
var sectionId = nextSectionWithId.attr('id');
console.log(sectionId)
}
});
Mais cela ne fonctionne pas. J'ai mis le code jusqu'ici dans jsFiddle.
Des idées pourquoi cela ne fonctionne pas?
- .la prochaine n'est pas la recherche par le biais de tous les frères et sœurs, il ne regarde que l'immédiat prochaine. c'est dans les docs de l'api.
- Si un sélecteur est fourni, il récupère le frère suivant seulement si elle correspond à celle que le sélecteur. Votre prochaine section n'a pas un id.
- Excellent, j'ai évidemment mal interprété à dire "à la prochaine pour correspondre aux critères" non "à la prochaine si elle répond aux critères".
- Vous n'êtes pas le premier, et de loin, ont fait de cette hypothèse.
Vous devez vous connecter pour publier un commentaire.
Essayer :
ou
Violon
Vous ne pouvez pas utiliser la prochaine parce que la prochaine sera pour un match seulement dans l'élément suivant. De sorte que vous pouvez à la place utiliser nextAll combiné avec :première dans le sélecteur.
Mise à jour
Vous pouvez utiliser le (première) méthode jquery pour récupérer le premier élément de la collection ainsi ce qui semble être une option plus rapide.
Pourrait probablement être cette raison:
Coutesy @T. J. Crowder
Utilisation .nextAll()
DÉMO
DÉMO
DÉMO
attr('id')
fonctionne parce qu'il ne considère que le premier élément de la collection.id
s, tandis que le.nextAll("section[id]").attr("id")
sera de retour leid
de le premier de la fratrie (le cas échéant) ouundefined
si aucun, plutôt que de jeter. C'est l'un des rares cas d'utilisation où à l'aide de.attr("id")
peut réellement faire sens (contrairement à la commune d'horreur$(this).attr("id")
on voit trop souvent 🙂 )..eq(0)
. Ty pour me dire ça 🙂.eq(0)
si vous utilisezattr
comme un getter. Lorsqueattr
(ouprop
, oucss
, outext
, ouhtml
, ...) est utilisé comme un getter, il toujours ne regarde que le premier élément de l'ensemble. Je ne sais pas quelle est la réponse à l'origine ressemblait, mais si quelqu'un downvoted pour faire.nextAll(...).attr("id")
, c'était leur mauvaise, pas le vôtre.id
. Ils ont dit qu'ils voulaient trouver le section (pour moi, cela signifie que l'élément, et non leid
valeur). Donc.nextAll("section[id]").first()
ou.nextAll("section[id]:first')
comme dans les PSL de la réponse.