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' исключает соответствующий элемент селектора.