【问题标题】:Use jQuery to wrap all elements in a div [duplicate]使用jQuery将所有元素包装在一个div中[重复]
【发布时间】:2011-07-28 09:17:17
【问题描述】:

我有一个很奇怪的标记,但我有 3 个 div:

<div id="div1"></div>

<div id="div4"></div>

<div id="div12"></div>

这 3 个 div 之间可能还有其他元素,但我需要做的是确保有一个 div 包装这 3 个 div,这样标记最终会像这样:

<div class="wrapped">
    <div id="div1"></div>

    <div id="div4"></div>

    <div id="div12"></div>
</div>

这可以使用 jQuery 的 wrap 或 wrapAll 函数吗?

【问题讨论】:

  • 3个div之间的所有其他元素也应该被包装吗?

标签: jquery


【解决方案1】:

wrapAll() 可以做到这一点。您可以使用nextUntil()andSelf()add() 来匹配#div1#div12 之间的元素,包括:

$("#div1").nextUntil("#div12").andSelf().add("#div12")
          .wrapAll("<div class='wrapped'></div>");

【讨论】:

  • 如果 div 之间有任何纯文本,这将不起作用,请参阅我的示例:jsfiddle.net/alp82/PZvEd
  • @Alp,好点子。提问者,这对你来说是个问题吗?
  • 嗯,实际上包装不起作用,它只需要一个元素进入它的包装
  • @ben,奇怪,它在this fiddle 中对我有用。你用的是哪个浏览器?
  • 要解决纯文本问题,您可以在运行上述答案中的代码之前包装任何文本节点。见jsfiddle.net/PZvEd/3
【解决方案2】:
var wrapper = $('<div></div>').addClass('wrapped');
var parent = $('#div1').parent();
wrapper.append($('#div1, #div4, #div12')).appendTo(parent);

如果你愿意,你可以去掉 wrapper var。这是一个 jsFiddle:http://jsfiddle.net/DHTd6/

【讨论】:

  • 你链接到正确的 Fiddle 了吗?
  • @jensgram 呵呵。不,我没有。那把小提琴是为了一个不同的问题。感谢您指出这一点。
猜你喜欢
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多