.wrap()和多个元素选择器

时间:2010-01-29 10:39:29

标签: javascript jquery html

包装多个元素的最佳方法是什么。我尝试了几种方法但没有成功。

这是标记:

<div>
   <h3>Civil aerospace </h3>
   <p>Powering more than 30 civil aircraft types from small executive jets to the lartest airliners.</p>
   <h4>£47.1bn</h4>
   <p>Order book</p>
   <h4>£4,481m</h4>
   <p>Revenue</p>
</div>

这是我最终需要的:

<div class="hub">
   <h3>Civil aerospace </h3>
   <p>Powering more than 30 civil aircraft types from small executive jets to the lartest airliners.</p>
    <div class="wrap">
     <h4>£47.1bn</h4>
     <p>Order book</p>
     </div>
    <div class="wrap">
     <h4>£4,481m</h4>
     <p>Revenue</p>
    </div>
</div>

尝试过添加,查找,过滤等

我是否需要设置迭代?

2 个答案:

答案 0 :(得分:1)

您可以使用新的nextUntil()方法执行此操作:

$(function(){
  $("h4").each(function(){
     $(this).add($(this).nextUntil("h4")).wrap("<div class='wrap' />");
  });
});

nextUntil方法是jQuery 1.4中的新方法。

答案 1 :(得分:1)

抱歉,不得不掏出一个煎炸的东西:)

Scharrels说得对,但这也是jQuery 1.3.2的可能解决方案:

$(function(){
    $('div').addClass('hub').find('h4').wrap('<div class="wrap"></div>');
    $('.wrap').each(function(){
        var div = $(this);
        div.append(div.next('p').remove());

        while(div.next('p').length != 0)
            div.append(div.next('p').remove());
    });
});

它有点繁琐,但它有效,并且它确实满足每个<p>后有多个<h4>标记。