JQuery nextUntil, включая, не исключая согласованный элемент?

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

Обходной путь, который я нашел, заключался в том, чтобы получить 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 + *')  

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

Ответ 3

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

var elearr = $('selector1').nextUntil('selector2');
var lastele = elearr[elearr.length-1];
elearr.push($(lastele).next());

Ответ 4

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. Не нужно искать дважды. Легко понять и легко запомнить.

Ответ 5

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

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

Ответ 6

Как ответили другие, использование .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>");

Ответ 7

конечно, вы можете просто использовать jQuery nextAll.

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

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