jQuery nextUntil, включая, не исключая сопоставленный элемент? - PullRequest
16 голосов
/ 02 марта 2012

Есть ли способ легко сделать nextUntil, чтобы включить элемент, соответствующий селектору? У меня есть это, что хорошо, только если есть предыдущий брат:

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

Ответы [ 7 ]

21 голосов
/ 07 февраля 2013

Удалите .prev() и используйте .addBack() в конце вашего селектора, как показано ниже:

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

Предварительно 1.8 следует использовать andSelf вместо addBack

1 голос
/ 12 июня 2012

Вот что я делаю. Я думаю, что это немного чище, чем другие предложения.

var elearr = $('selector1').nextUntil('selector2');
var lastele = elearr[elearr.length-1];
elearr.push($(lastele).next());
1 голос
/ 10 апреля 2012

Обходной путь, который я нашел, состоял в том, чтобы получить length, используя nextUntil (или prevUntil), затем использовать slice() с этой длиной + 1 на nextAll():

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

Это неуклюже, но работает. НТН

Fwiw в следующих документах Biziclop упоминает добавление + *:

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

но это не работает для меня: /

0 голосов
/ 08 июня 2018

Как ответили другие, использование .addSelf() является решением для создания включающего исходного элемента.

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

И чтобы сделать конечный элемент включительным, метод .nextUntil(".class + *") решил проблему.

$("#content").find("h3:first").nextUntil("ul:last + *").addSelf().wrapAll("<div id='collapse'></div>");
0 голосов
/ 02 мая 2017

Я думаю, что правильный ответ -

$("#content").find("h3:first").nextUntil("ul:last").addSelf().wrapAll("<div id='collapse'></div>");
0 голосов
/ 07 февраля 2014
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

Самый интуитивный, я думаю. Все сделано с помощью методов jQuery. Нет необходимости искать дважды. Легко понять и легко запомнить.

0 голосов
/ 02 марта 2012

конечно можно, просто используйте jQuery nextAll .

nextAll будет включать следующие элементы, соответствующие этому селектору.

, тогда как nextUntil исключает соответствующий элемент селектора.

...