2012-03-02 11 views
16

C'è un modo per fare nextUntil facilmente, in modo che l'elemento corrispondente dal selettore sia incluso? Ho questa, che va bene solo se v'è un fratello precedente:jQuery nextUntil, incluso, non escludendo l'elemento corrispondente?

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

Puoi aggiornare la questione con le parti rilevanti del vostro codice HTML? Questo ci aiuterebbe a capire cosa stai cercando di ottenere. –

risposta

20

Rimuovere .prev() e utilizzare .addBack() alla fine del selettore come illustrato di seguito:

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

Pre 1.8 dovrebbe usare andSelf invece di addBack

+7

Non avevo mai accettato una risposta a questa vecchia domanda. Cordiali saluti, chiunque lo verifichi ora: "andSelf() - Nota: questa funzione è stata deprecata e ora è un alias per .addBack(), che dovrebbe essere usato con jQuery 1.8 e versioni successive." – jwinn

+0

Ho appena scoperto questa risposta oggi (21-07-2017) e mi ha aiutato nel mio progetto, ty – samouray

-1

Naturalmente è possibile, basta usare jQuery nextAll.

'nextAll' includerà i seguenti elementi corrispondenti a tale selettore.

mentre 'nextUntil' esclude l'elemento di selezione corrispondente.

+0

"next" ottiene solo il singolo fratello successivo, mentre io sto afferrando tutti i fratelli fino a un punto finale definito. – jwinn

+0

sì hai ragione, cambiando la mia risposta. –

+0

-1: da nextAll() ref: Ottieni tutti ** seguenti ** fratelli di ciascun elemento nel set di elementi corrispondenti, opzionalmente filtrati da un selettore. , quindi ** non ** includerà l'elemento abbinato. –

1

La soluzione che ho trovato è stato quello di ottenere il length utilizzando nextUntil (o prevUntil), quindi utilizzare slice() con questa lunghezza + 1 sul nextAll():

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

E 'goffa, ma funziona. HTH

FWIW in the nextAll docs Biziclop mentions aggiungendo + *:

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

, ma questo non funziona per me:/

1

Ecco quello che faccio. Penso che sia un po 'più pulito di altri suggerimenti.

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 

il più intuitivo, penso . Tutto realizzato con metodi jQuery. Non è necessario effettuare una ricerca due volte. Facile da capire e facile da ricordare.

0

Penso che la risposta corretta è

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