如何前置或包装每个标签和div?

时间:2013-01-05 15:46:32

标签: javascript jquery each

我有这个标签序列和div s,我需要包围每组1个标签+ 1 div另一个div。我知道我必须使用.each和.wrap.prepend我需要帮助。我怎么能这样做?

HTML:

<label>label</label>
<div>text</div>
<label>label</label>
<div>text</div>

Here I have set a jsFiddle demo.

结果应该是这样的:

<div class="1">
  <label>label</label>
  <div>text</div>
</div>
<div class="1">
  <label>label</label>
  <div>text</div>
</div>

4 个答案:

答案 0 :(得分:2)

或者,使用.wrapAll()

$("label").each(function(){
  var $this = $(this);
  $this.add($this.next()).wrapAll("<div class='1'/>");
});

See it here.

答案 1 :(得分:2)

假设这个标记总是这样:

$("label").each(function () {
  $(this).next("div").andSelf().wrapAll("<div>");
});

您可以不使用"div" .next,但可以防止其他元素妨碍使用。

http://jsfiddle.net/UNyeQ/3/

答案 2 :(得分:1)

你可以通过迭代标签并包装/附加每个标签来实现:

$('label').each(function() {
    $(this).wrap('<div class="l"/>').parent().next().appendTo($(this).parent());
});

演示http://jsfiddle.net/UNyeQ/1/

答案 3 :(得分:1)

这可能不是最有效的方式,但经过多次不同的尝试,这就是我想出的:

$('label').each(function() {
  var next = $(this).nextAll('div')[0];
  $(this).wrap('<div class="new" />').append(next);
});

我试过的其他所有内容都会选择标签和div分别迭代它们,所以它不会在同一个div下配对。将div保存到变量的额外工作是因为nextAll()对同一父级的兄弟节点进行操作 - 可能label将成为新div的子节点在评估nextAll()之前,否则。