如何在jQuery中包装具有不同类名的DIV标签?
可能重复:
如何将父元素添加到一组段落中?
我在文档中重复了以下HTML块
My first div My second div My first div My second div ...
如何用jQuery包装Divs以获得这样的结果HTML …
My first div My second div My first div My second div ...
你很幸运,这正是wrapAll
的用途:
$(".first, .second").wrapAll('');
实例 | 资源
您的编辑显着改变了问题。 如果只需要在某个包含的块中执行上述操作,则可以遍历包含的块并仅将wrapAll
应用于其内容。 您需要一种方法来确定您想要对div进行分组的方式,您尚未在问题中指定。
如果div周围有某种容器,你可以这样做:
$(".block").each(function() { $(this).find(".first, .second").wrapAll(''); });
在那个例子中,我假设div在一个带有"block"
类的容器中。
实例 | 资源
如果没有结构方法来识别它们,你将不得不以其他方式做到这一点。 例如,在这里我们假设任何时候我们看到first
,我们应该停止分组:
var current = $(); $(".first, .second").each(function() { var $this = $(this); if ($this.hasClass('first')) { doTheWrap(current); current = $(); } current = current.add(this); }); doTheWrap(current); function doTheWrap(d) { d.wrapAll(''); }
实例 | 资源
这是因为$()
以文档顺序为你提供元素,所以如果我们按顺序遍历它们,保存它们,然后在我们看到新的first
一个时将它们包起来(当然,最后清理一下) ),你得到了理想的结果。
或者这是另一种做同样事情的方法,它不使用wrapAll
。 它依赖于第一个匹配的元素是first
(所以在first
s之前没有second
!):
var current; $(".first, .second").each(function() { var $this = $(this); if ($this.hasClass('first')) { current = $('').insertBefore(this); } current.append(this); });
实例 | 资源
$('div').wrapAll('');
会这样做,但也可以包装任何其他divs:
$('.first, .second').wrapAll('');
更好。