2012-03-02 20 views
16

¿Hay alguna manera de hacer fácilmente nextUntil, de modo que el elemento coincidente con el selector esté incluido? Tengo esta, que sólo está bien si hay un hermano anterior:jQuery nextUntil, incluido, sin excluir el elemento coincidente?

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

puede actualizar su pregunta con las partes relevantes de su marcado HTML? Esto nos ayudaría a entender lo que estás tratando de lograr. –

Respuesta

20

Retire .prev() y utilizar .addBack() al final de su selector como se muestra a continuación:

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

Pre 1.8 debe utilizar andSelf en lugar de addBack

+7

Nunca había aceptado una respuesta en esta vieja pregunta. FYI, cualquiera que compruebe esto ahora: "andSelf() - Nota: Esta función ha quedado en desuso y ahora es un alias para .addBack(), que se debe usar con jQuery 1.8 y versiones posteriores". – jwinn

+0

Acabo de descubrir esta respuesta hoy (21-07-2017) y me ayudó en mi proyecto, ty – samouray

-1

Por supuesto que puede, sólo tiene que utilizar jQuery nextAll.

'nextAll' incluirá los siguientes elementos que coincidan con ese selector.

mientras que 'nextUntil' excluye el elemento selector correspondiente.

+0

"siguiente" solo obtiene el hermano siguiente, mientras que agarró a todos los hermanos hasta un punto final definido. – jwinn

+0

sí, tienes razón, cambiando mi respuesta. –

+0

-1: de nextAll() ref: Obtenga todos los ** siguientes ** hermanos de cada elemento en el conjunto de elementos coincidentes, opcionalmente filtrados por un selector. , por lo que ** ** no incluirá el elemento coincidente. –

1

La solución que encontré fue para obtener el length usando nextUntil (o prevUntil), a continuación, utilizar slice() con esta longitud + 1 en nextAll():

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

Es torpe, pero funciona. HTH

Fwiw in the nextAll docs Biziclop mentions añadiendo + *:

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

pero esto no funciona para mí:/

1

Esto es lo que hago. Creo que es un poco más limpio que otras sugerencias.

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 

el más intuitivo, creo . Todo hecho con métodos jQuery. No hay necesidad de buscar dos veces. Fácil de entender y fácil de recordar

0

creo respuesta correcta es

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