使用 jQuery 将元素包裹在 div 中

Posted

技术标签:

【中文标题】使用 jQuery 将元素包裹在 div 中【英文标题】:Wrap elements inside a div using jQuery 【发布时间】:2012-03-06 16:43:15 【问题描述】:

我有这个:

<div>content element</div>
<div class="accordionTrigger">
  <div><h1>title</h1></div>
  <p>text</p>
  <p>text</p>
  <p>text</p>
  ...
</div>
<div>content element</div>
<div>content element</div>

我需要像这样将所有 p-tags 包装在一个 div 中:

    <div>content element</div>
    <div class="accordionTrigger">
      <div><h1>title</h1></div>
      <div class="moreInfo">    
        <p>text</p>
        <p>text</p>
        <p>text</p>
        ...
      </div>
    </div>
    <div>content element</div>
    <div>content element</div>

可以用 jQuery 完成吗?


如果我有多个&lt;div class="accordionTrigger"&gt;&lt;/div&gt;,像这样:

<div>content element</div>
<div class="accordionTrigger">
  <div><h1>title</h1></div>
  <p>text</p>
  <p>text</p>
  ...
</div>
<div>content element</div>
<div class="accordionTrigger">
  <div><h1>title</h1></div>
  <p>text</p>
  <p>text</p>
  ...
</div>

结果将是:

<div>content element</div>
<div class="accordionTrigger">
  <div><h1>title</h1></div>
  <p>text</p>
  <p>text</p>
  <p>text</p>
  <p>text</p>
  ...
</div>
<div>content element</div>
<div class="accordionTrigger">
  <div><h1>title</h1></div>
</div>

我可以避免吗?

【问题讨论】:

【参考方案1】:

检查.wrapAll()方法:

$('.accordionTrigger p').wrapAll('<div class="moreInfo"></div>');

wrapAll() 方法会将所有匹配的元素包装到另一个元素中(相比之下 .wrap() 方法单独包装匹配的元素)

DEMO

【讨论】:

【参考方案2】:

检查一下它会按预期工作

<div>content element</div>
<div class="accordionTrigger">
  <div><h1>title</h1></div>


  <p>text</p>
  <p>text</p>
  <p>text</p>
  <script type="text/javascript"> 
      $("p").wrapAll("<div class='moreinfo'/>"); 
  </script>
</div>
<div>content element</div>
<div>content element</div>

【讨论】:

以上是关于使用 jQuery 将元素包裹在 div 中的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中10个非常有用的遍历函数

如何从 JQuery each() 中获取元素列表

jQuery_DOM学习之------包裹元素的方法

jQuery核心

如何将 div 包裹在多个相同的类元素周围

jQuery对DOM节点进行操作(包裹节点)