我这里有另一个问题。我有几个重复的div组。一组中有3个不同类别的div。
我需要做的是将其包装成一个'容器'。当我使用wrapAll时,它将所有内容包装成一个div。
这是我的HTML:
<div class="bb_box_tl"></div>
<div class="bb_box_l"></div>
<div class="bb_box_lb"></div>
<div class="bb_box_tl"></div>
<div class="bb_box_l"></div>
<div class="bb_box_lb"></div>
<div class="bb_box_tl"></div>
<div class="bb_box_l"></div>
<div class="bb_box_lb"></div>
这是一体的。
因为我的结果我希望他们看起来像这样:
<div class="box-cont">
<div class="bb_box_tl"></div>
<div class="bb_box_l"></div>
<div class="bb_box_lb"></div>
</div>
<div class="box-cont">
<div class="bb_box_tl"></div>
<div class="bb_box_l"></div>
<div class="bb_box_lb"></div>
</div>
<div class="box-cont">
<div class="bb_box_tl"></div>
<div class="bb_box_l"></div>
<div class="bb_box_lb"></div>
</div>
提前感谢您的帮助
答案 0 :(得分:7)
我刚刚写了这个插件
(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);
传入定义
的选项对象<div>
对您的数据使用如此。您需要为divs
定义父元素$(function() {
$('body').wrapChildren({
childElem : 'div.bb_box_tl, div.bb_box_l, div.bb_box_lb' ,
sets: 3,
wrapper: 'div class="box-cont"'
});
});
这是一个带有一些数据的Working Demo。
<强>更新强>
I wrote a blog post with a slightly modified and improved version of this
答案 1 :(得分:2)
假设你的div都是带有id容器的元素的子元素(否则更改jquery选择器)并严格按此顺序出现
while ($("#container > div[class^='bb_box_']").size() >= 3)
$("#container > div[class^='bb_box_']:lt(3)").wrapAll("<div class='box-cont'></div>");
答案 2 :(得分:1)
这有点令人费解,但我想不出更简单的方法。它有效:
$("div.bb_box_tl").wrap("<div class='box-cont'></div>");
$("div.box-cont").each(function() {
$(this).append($(this).next());
$(this).append($(this).next());
});
答案 3 :(得分:-1)
我不是专家,但这可能有效:
$(".bb_box_tl").before('<div class="box-cont">');
$(".bb_box_lb").after('</div>');