在jquery中包装非子元素

时间:2011-04-18 14:41:22

标签: jquery html dom

我目前有一个html文档,格式如下:

<h1>a</h1>
<p>bla</p>
<p>more bla</p>

<h1>b</h1>
<p>different bla</p>

我正在寻找一种方法将<h1><p>包含在div中,所以它看起来像:

<div>
    <h1>a</h1>
    <p>bla</p>
    <p>more bla</p>
</div>

<div>
    <h1>b</h1>
    <p>different bla</p>
</div>

但是我使用wrap和wrapAll来实现这一点并不成功。

3 个答案:

答案 0 :(得分:6)

var tagName = 'h1';
$(tagName).each(function ()
{
    var $this = $(this);
    $this.add($this.nextUntil(tagName)).wrapAll('<div></div>');
});

Demo demo demo demo demo

答案 1 :(得分:1)

你可以做的是在DOM中创建一个你想要它的<div>,然后将你想要的元素移动到它里面。

例如(可能更好):

$("h1").before("<div></div>");
$("h1").each(function() {
    $(this)
        .nextUntil("h1").andSelf()
        .appendTo(
            $(this).prev("div")
        );
    });

答案 2 :(得分:1)

如果你可以添加更多的css类,那可能会更容易。 见http://jsfiddle.net/avaXp/

<h1 class='one'>a</h1>
<p class='one'>bla</p>
<p class='one'>more bla</p>

<h1 class='two'>b</h1>
<p class='two'>different bla</p>



$('.one').wrapAll("<div></div>")
$('.two').wrapAll("<div></div>")