有没有办法wrapAll()但忽略一个元素?

时间:2013-07-01 21:30:12

标签: javascript jquery jquery-selectors

如果您有以下代码:

<div class="parent">

    <div class="1"></div>
    <div class="2"></div>
    <div class="3"></div>
    <div class="4"></div>
    <div class="5"></div>   

</div>

如何用类2,3,4,5在div周围换一个新的div,所以看起来像这样:

<div class="parent">

    <div class="1"></div>

    <div class="sub">
        <div class="2"></div>
        <div class="3"></div>
        <div class="4"></div>
        <div class="5"></div> 
    </div> 

</div>

父级的wrapAll会用新的div包装所有内容,有没有办法让它忽略第一个div?

3 个答案:

答案 0 :(得分:7)

使用gt(0)选择除第一个div(直接后代)和wrapAll之外的所有内容。这将选择.parent div。

下所有索引大于0的div
$('.parent > div:gt(0)').wrapAll('<div class="sub">');

<强> Fiddle

参见 :gt()

输出:

<div class="parent">

    <div class="1">1</div>
    <div class="sub">
            <div class="2">2</div>
            <div class="3">3</div>
            <div class="4">4</div>
            <div class="5">5</div>
    </div>
</div>

答案 1 :(得分:4)

使用not() filter:not() selector

$('.parent div').not('.1').wrapAll('<div class="sub">');

或者:

$('.parent div:not(.1)').wrapAll('<div class="sub">');

如果您始终要忽略第一个元素,也可以使用div:first-child代替.1

答案 2 :(得分:1)

如果您要保留的元素不一定是第一个,您可以使用:

$(".parent div").not("div.1").wrapAll("<div class='sub'>");

虽然,这将重新排序你的div,以便首先包装,而未包装的元素最后。当它是第一个元素时不是问题,但如果它是第三个元素,例如,输出将是:

<div class='sub'>
    <div class="1"></div>
    <div class="2"></div>
    <div class="4"></div>
    <div class="5"></div>
</div>
    <div class="3"></div>

实施例: http://jsfiddle.net/tomtheman5/3TL4M/

编辑:刚看到@ Corion的回答......这基本上是相同的,但有更多信息。我会把它留下来。