将多个子元素包装到位

时间:2013-05-11 19:43:59

标签: jquery jquery-selectors

我有一些HTML与以下内容基本相同:

<div id="row-1" class="row">
    <div class="col1"></div>
    <div class="col2"></div>
    <div class="col3"></div>
    <div class="col4"></div>
    <div class="col5"></div>
</div>
<div id="row-2" class="row">
    <div class="col1"></div>
    <div class="col2"></div>
    <div class="col3"></div>
    <div class="col4"></div>
    <div class="col5"></div>
</div>
<div id="row-3" class="row">
    <div class="col1"></div>
    <div class="col2"></div>
    <div class="col3"></div>
    <div class="col4"></div>
    <div class="col5"></div>
</div>

现在,我需要使用jQuery来选择col2,col3,col4并在它们周围换一个新的div对来生成这样的html:

<div id="row-n" class="row">
    <div class="col1"></div>
    <div class ="wrapped-1">
        <div class="wrapped-2">
            <div class="col2"></div>
            <div class="col3"></div>
            <div class="col4"></div>
        </div>
    </div>
    <div class="col5"></div>
</div>

我遇到了一些困难。我试过用这个:

$('div[id^="row-"]')
    .children('.col2, .col3, .col4')
    .wrapInner('<div class="wrapped-2" />')
    .wrapInner('<div class="wrapped-1" />');

...它给出了我想要的最接近的结果,但是我需要外部标签而不是插入所选元素。 .wrapAll()似乎只是将所有项目分组到第一行,并从后续行中删除它们,这是完全错误的。

我对jQuery相对较新,所以对此有任何帮助和/或建议将不胜感激!

1 个答案:

答案 0 :(得分:3)

实际上在这种情况下应该使用的方法是wrapAll方法,它用指定的元素包装所有选定的元素,使用each方法可以防止这种情况,所以只有包裹特定元素的子元素。

$('div[id^="row-"]').each(function() {
    $(this).children('.col2, .col3, .col4')
           .wrapAll('<div class="wrapped-1"><div class="wrapped-2"></div></div>');
});

http://jsfiddle.net/rVfp9/