jQuery: обернуть элементы с помощью nextUntil()

<h2 id="match" class="contentHeadline">Match only in here</h2>

<p>I don't if or how many dl+table live here.</p>

<dl><dt>Text</dt></dl>
<table class="groupTable"><td>1</td><td>Abc</td></table>

<dl><dt>Text</dt></dl>
<table class="groupTable"><td>2</td><td>Def</td></table>

<dl><dt>Text</dt></dl>
<table class="groupTable"><td>3</td><td>Ghi</td></table>

<p class="foo">Maybe some text lives here. I should not float.</p>

Я хочу обернуть каждую пару таблиц dl + в div.box (плавающий), но только непосредственно под h2#match, пока не последуют другие вещи (.foo или заголовки).

$("dl").each(function(){
    $(this).next('.groupTable').andSelf()
        .wrapAll('<div class="box"></div>');
});

/* Clear */
$('<div class="clear"></div>').after('.box:last');

nextUntil() Заворачивает дл и стол индивидуально.

Атм тестовая группа неправильно упакована.

Тест: http://jsfiddle.net/GQwB5/

Желаемый результат: http://jsfiddle.net/kppQ9/

1 ответ

Решение

$('#match').nextUntil('.contentHeadline') работает хорошо.

Применяют:

$('#match').nextUntil('.contentHeadline').filter('dl').each(function(){
    $(this).next('.groupTable').andSelf().wrapAll('<div class="box" />');
});
$('#match').nextUntil('.contentHeadline').filter('.box:last').after('<div class="clear" />');

Скрипка: http://jsfiddle.net/GQwB5/1/

Я подозреваю что .nextUntil(".foo, .contentHeadline") не будет работать, потому что он ожидает один соответствующий элемент, и это вернет как минимум два.

Другие вопросы по тегам