使用jQuery将三个重复的div组包装成一个

时间:2009-11-10 14:38:30

标签: jquery

我这里有另一个问题。我有几个重复的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>

提前感谢您的帮助

4 个答案:

答案 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);

传入定义

的选项对象
  • childElem - 要包装的直接子项的过滤器选择器
  • sets - 您希望如何对子元素进行分组。例如,在您的情况下为3组。默认值为1
  • wrapper - 包装子元素的元素。默认为<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>');