jQuery – 使用wrap()来包装多个元素?

我将如何去使用wrap() )在一个<div>包装多个元素(使用不同的类)?

例如,在我正在处理的表单上,有一个checkboxinput和标签的大列表,格式如下:

 <input> <label> <input> <label> 

等等

我想要围绕input和标签包装一个<div> ,所以结果是:

 <div> <input> <label> </div> <div> <input> <label> </div> 

谢谢!

您可以使用.wrapAll()方法。

 $('form > input').each(function(){ $(this).next('label').andSelf().wrapAll('<div class="test"/>'); }); 

如果您的标记始终是完全相同的顺序,我宁愿使用:

 var $set = $('form').children(); for(var i=0, len = $set.length; i < len; i+=2){ $set.slice(i, i+2).wrapAll('<div class="test"/>'); } 

应该快得多。

Ref .: .wrapAll() ,.andSelf() ,.slice()

 $('input+label').each(function(){ $(this).prev().andSelf().wrapAll('<div>'); });​ 

如果你有这样的事情:

 <input id="input1"> <label id="label1"> <input id="input2"> <label id="label2"> 

那么你可以使用jQuery:

  jQuery("#input1").next().andSelf().wrapAll('<div id="newDiv" />'); jQuery("#input2").next().andSelf().wrapAll('<div id="newDiv" />'); 

并得到这个:

 <div id="newDiv"> <input id="input1"> <label id="label1"> </div> <div id="newDiv"> <input id="input2"> <label id="label2"> </div> 

为我工作:-)

jQuery函数wrapAll允许你包装多个元素,但是如果你有一个像你写的DOM那么它不会工作得太好,因为你不能很容易地将标签的一部分和input与select器相匹配。 我build议添加一些类到每个部分,然后使用wrapAll。

 <input class="i1"/> <label class="i1"/> <input class="i2"/> <label class="i2"/> $('.i1').wrapAll('<div/>'); $('.i2').wrapAll('<div/>'); 

这会给你

 <div> <input class="i1"/> <label class="i1"/> </div> <div> <input class="i2"/> <label class="i2"/> <div>