使用jQuery将三个重复的div组包装成一个
我这里有另一个问题。 我有几个重复的div组。 一组中有3个不同类别的div。
我需要做的是将其包装成一个“容器”。 当我使用wrapAll时,它将所有包装成一个div。
这是我的HTML:
这是一体的。
因为我的结果我希望他们看起来像这样:
提前谢谢你的帮助
我刚刚写了这个插件
(function($){ $.fn.wrapChildren = function(options) { var options = $.extend({ childElem : undefined, sets : 1, wrapper : 'div' }, options || {}); if (options.childElem === undefined) return this; return this.each(function() { var elems = $(this).children(options.childElem); var arr = []; elems.each(function(i,value) { arr.push(value); if (((i + 1) % options.sets === 0) || (i === elems.length -1)) { var set = $(arr); arr = []; set.wrapAll($("<" + options.wrapper + ">")); } }); }); } })(jQuery);
您传入一个选项对象定义
- childElem – 要包装的直接子节点的filter选择器
- sets – 如何对子元素进行分组。 例如,在您的情况下,3组。 默认值为1
- wrapper – 包装子元素的元素.default是
像这样使用你的数据。 您需要为div定义父元素
$(function() { $('body').wrapChildren({ childElem : 'div.bb_box_tl, div.bb_box_l, div.bb_box_lb' , sets: 3, wrapper: 'div class="box-cont"' }); });
这是一个包含一些数据的工作演示 。
更新:
我写了一篇博文,其中略有修改和改进版本
假设你的div是具有id容器的元素的所有子元素(否则更改jquery选择器)并且严格按此顺序出现
while ($("#container > div[class^='bb_box_']").size() >= 3) $("#container > div[class^='bb_box_']:lt(3)").wrapAll("");
这有点令人费解,但我想不出更简单的方法。 虽然它有效:
$("div.bb_box_tl").wrap(""); $("div.box-cont").each(function() { $(this).append($(this).next()); $(this).append($(this).next()); });
我不是专家,但这可能有用:
$(".bb_box_tl").before(''); $(".bb_box_lb").after('');