jQuery:用nextUntil()换行元素

时间:2014-07-13 10:31:35

标签: jquery wrapall 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#下匹配,直到跟随其他内容(.foo或标题)。

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

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

nextUntil()分别包装dl和表格。

Atm测试组被错误包裹。

测试:http://jsfiddle.net/GQwB5/

期望的结果:http://jsfiddle.net/kppQ9/

1 个答案:

答案 0 :(得分:2)

$('#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")不会起作用,因为它需要一个匹配的元素,并且至少会返回两个。