2010-03-05 10 views
2

je la liste suivanteEn utilisant jQuery pour revenir élément de la liste suivante dans une liste filtrée

<ul> 
    <li id="item1">Item 1</li> 
    <li id="item2">Item 2</li> 
    <li>Item 3</li> 
    <li id="item4">Item 4</li> 
</ul> 

En utilisant jQuery, je suis en train de parcourir la liste des LIs dont les ID commencent par « point ». Cependant, lorsque j'exécute ce code, je finis par récupérer "Item 3" plutôt que "Item 4".

Comment puis-je obtenir jQuery pour obtenir le prochain élément approprié d'une liste filtrée de LI?

Répondre

6

Vous souhaitez utiliser nextAll(). Suivant va seulement récupérer le frère immédiatement après l'élément actuel. NextAll() considérera tous les frères et sœurs suivants.

var nextItemWithItemID = $('#item2').nextAll('li[id^=item]:first'); 
+0

@tvanfosson Ne peut pas croire que je n'ai jamais rencontré ce problème avant, a été réellement surpris avec .next() ne fonctionnait pas comme prévu ... Je pourrais jurer qu'il était utilisé pour aller au prochain jumelage correspondant, oh bien. +1 Ceci est la bonne approche. –

+0

@Nick Craver - il est presque. Cela vous obtiendra tous, mais n'obtient pas encore l'OP au prochain article. Je suis sûr que tout ce que vous avez à faire est de l'indexer, non? .index (0)? Pas certain. Je pourrais vouloir être explicite avec ça. –

+0

@DN - trompé par l'exemple. Il devrait probablement avoir un filtre ': first', aussi. Mettra à jour. – tvanfosson

1

J'avais ce problème hier soir. Alors que @tvanfosson fournit un moyen de se rendre à tous les frères et sœurs qui suivent, si vous voulez que le élément suivant qui correspond à ce critère, je suis venu avec la solution (adaptée à votre exemple) suivant:

var nextItemWithItemID = $("#item2").nextUntil("li[id^='item']").andSelf().next(); 

C'est il. En utilisant nextUntil() saisit tout jusqu'à le terme, mais ne comprenant pas, donc vous devez utiliser next(). Mais si l'ensemble renvoyé est vide (s'il n'y a rien entre votre sélecteur initial et la chose suivante qui correspond à votre requête), cela ne fonctionnera pas - andSelf() résout cela.