2012-03-02 8 views
16

Czy istnieje sposób na łatwe wykonanie następnej_do momentu, aby element dopasowany przez selektor został uwzględniony? Mam to, co jest w porządku, jeśli tylko istnieje poprzedni rodzeństwa:jQuery nextUntil, w tym, nie wykluczając dopasowanego elementu?

$("#content").find("h3:first").prev().nextUntil("ul:last").wrapAll("<div id='collapse'></div>"); 
+1

można zaktualizować swoje pytanie z odpowiednimi częściami znaczników HTML? Pomoże nam to zrozumieć, co próbujesz osiągnąć. –

Odpowiedz

20

Usuń .prev() i używać .addBack() na końcu selektora jak pokazano poniżej:

$("#content").find("h3:first").nextUntil("ul:last").addBack().wrapAll("<div id='collapse'></div>"); 

Pre 1.8 powinny stosować andSelf zamiast addBack

+7

Nigdy nie przyjąłem odpowiedzi na to stare pytanie. FYI, ktokolwiek to sprawdza teraz: "andSelf() - Uwaga: Ta funkcja została uznana za przestarzałą i jest teraz aliasem dla .addBack(), która powinna być używana z jQuery 1.8 i nowszymi." – jwinn

+0

Właśnie odkryłem tę odpowiedź dzisiaj (21-07-2017) i pomógł mi w moim projekcie, ty – samouray

-1

oczywiście można, wystarczy użyć jQuery nextAll.

"nextAll" będzie zawierał następujące elementy pasujące do tego selektora.

podczas gdy "nextUntil" wyklucza pasujący element selektora.

+0

"Następny" powoduje, że singiel następuje po rodzeństwie, podczas gdy ja chwytam wszystkie rodzeństwo aż do określonego punktu końcowego. – jwinn

+0

Tak, masz rację, zmieniając moją odpowiedź. –

+0

-1: od nextAll() ref: pobiera wszystkie ** następujące ** rodzeństwa każdego elementu w zestawie dopasowanych elementów, opcjonalnie filtrowane przez selektor. , więc ** nie będzie zawierało dopasowanego elementu. –

1

Obejście znalazłem było uzyskać length użyciu nextUntil (lub prevUntil), a następnie użyć slice() z tej długości + 1 na nextAll():

var inclusiveNextUntil = $(this).nextUntil('.some-class').length; 
var inclusiveNextUntil = $(this).nextAll().slice(0 , inclusiveNextUntil + 1); 

Jest niezdarny, ale to działa. HTH

FWIW in the nextAll docs Biziclop mentions dodanie + *:

$obj.nextUntil('.last-item-to-include + *') 

ale to nie działa dla mnie:/

1

Oto, co robię. Myślę, że to trochę czystsze niż inne sugestie.

var elearr = $('selector1').nextUntil('selector2'); 
var lastele = elearr[elearr.length-1]; 
elearr.push($(lastele).next()); 
0
var s = $("li.start").nextUntil("li.stop"); 
s = s.add(s.last().next()).add(s.first().prev()); 
//and do whatever you need to with s 

Najbardziej intuicyjny, myślę . Wszystkie wykonane za pomocą metod jQuery. Nie trzeba wyszukiwać dwa razy. Łatwy do zrozumienia i łatwy do zapamiętania.

0

myślę poprawną odpowiedzią jest

$("#content").find("h3:first").nextUntil("ul:last").addSelf().wrapAll("<div id='collapse'></div>"); 
Powiązane problemy