2012-03-02 1 views
16

Existe-t-il un moyen de faire facilement nextUntil, de sorte que l'élément correspondant au sélecteur soit inclus? J'ai ce qui est seulement bien s'il y a un membre de la fratrie:jQuery nextUntil, y compris, sans exclure l'élément correspondant?

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

Pouvez-vous mettre à jour votre question avec les parties pertinentes de votre balisage HTML? Cela nous aiderait à comprendre ce que vous essayez d'accomplir. –

Répondre

20

Retirer .prev() et utiliser .addBack() à la fin de votre sélection comme indiqué ci-dessous:

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

Pre 1.8 devrait utiliser andSelf au lieu de addBack

+7

N'avait jamais accepté une réponse à cette vieille question. FYI, n'importe qui vérifiant ceci maintenant: "andSelf() - Note: Cette fonction a été dépréciée et est maintenant un alias pour .addBack(), qui devrait être employé avec jQuery 1.8 et plus tard." – jwinn

+0

Je viens de découvrir cette réponse aujourd'hui (21-07-2017) et cela m'a aidé sur mon projet, ty – samouray

-1

vous pouvez bien sûr, il suffit d'utiliser jQuery nextAll. 'NextAll' comprendra les éléments suivants correspondant à ce sélecteur.

alors que 'nextUntil' exclut l'élément sélecteur correspondant.

+0

"suivant" obtient le seul frère suivant, alors que je suis en train de saisir tous les frères et soeurs jusqu'à un point final défini. – jwinn

+0

oui vous avez raison, en changeant ma réponse. –

+0

-1: from nextAll() ref: Obtenez tous les ** frères ** suivants de chaque élément de l'ensemble des éléments correspondants, éventuellement filtrés par un sélecteur. , donc cela ** n'inclura pas l'élément correspondant. –

1

La solution que j'ai trouvé pour obtenir le length en utilisant nextUntil (ou prevUntil), puis utilisez slice() avec cette longueur + 1 sur nextAll():

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

Il est maladroit, mais cela fonctionne. HTH

FWIW in the nextAll docs Biziclop mentions ajouter + *:

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

mais cela ne fonctionne pas pour moi:/

1

Voici ce que je fais. Je pense que c'est un peu plus propre que d'autres suggestions.

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 

Le plus intuitif, je pense . Tout est fait avec les méthodes jQuery. Pas besoin de chercher deux fois. Facile à comprendre et facile à retenir.

0

Je pense que la réponse correcte est

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