【问题标题】:How to add closing and opening div tags every X amount of divs inside another div?如何在另一个 div 中每隔 X 个 div 添加关闭和打开 div 标签?
【发布时间】:2016-04-11 01:04:28
【问题描述】:

我正在使用以下代码:

var groups = {};
$(".product-list .product-list_item").each(function(i) {
    var c = $(this).attr("class");
    if(!groups[c]) groups[c] = [];
    groups[c].push(this);         
});      
for(var i in groups) {      
    $(groups[i]).wrapAll('<div class="product-list_row" />').each(function(i){
        if (((i+1) % 3) == 0)
            $(this).after('</div><div class="product-list_row">');
        });
    }

我想要这个:

<div class="product-list">
  <div class="product-list_item jackson">x</div>
  <div class="product-list_item jackson">x</div>
  <div class="product-list_item jackson">x</div>
  <div class="product-list_item jackson">x</div>
  <div class="product-list_item mason">x</div>
  <div class="product-list_item mason">x</div>
  <div class="product-list_item mason">x</div>
</div>
<div class="whatever">
  <p>hello i'm a different div</p>
</div>
<div class="product-list">
  <div class="product-list_item taylor">x</div>
  <div class="product-list_item taylor">x</div>
  <div class="product-list_item pencil">x</div>
  <div class="product-list_item pencil">x</div>
  <div class="product-list_item pencil">x</div>
</div>

看起来像这样:

<div class="product-list">
  <div class="product-list_row">
    <div class="product-list_item jackson">x</div>
    <div class="product-list_item jackson">x</div>
    <div class="product-list_item jackson">x</div>
  </div>
  <div class="product-list_row">
    <div class="product-list_item jackson">x</div>
  </div>
  <div class="product-list_row">
    <div class="product-list_item mason">x</div>
    <div class="product-list_item mason">x</div>
    <div class="product-list_item mason">x</div>
  </div>
</div>
<div class="whatever">
  <p>hello i'm a different div</p>
</div>
<div class="product-list">
  <div class="product-list_row">
    <div class="product-list_item taylor">x</div>
    <div class="product-list_item taylor">x</div>
  </div>
  <div class="product-list_row">
    <div class="product-list_item pencil">x</div>
    <div class="product-list_item pencil">x</div>
    <div class="product-list_item pencil">x</div>
  </div>
</div>

如何让 jQuery 为 .product-list_row 插入一个结束标记和开始标记,例如 &lt;/div&gt;&lt;div class="product-list_row"&gt; 而不忽略结束标记,然后将结束标记添加到同一个新开始标记。如果你直接看上面的“jackson”类组的分裂,这就是我试图得到它的方式。

它将使用动态创建的 product-list_row div 正确地包装具有相同类名的分组 div。然后在该组中,它正确地找到并在 X 个 div 之后插入新的 html,但它只是没有根据我的需要正确格式化它,因为 jQuery 会自动关闭并删除我的结束标记。

我在这里找到了一些建议,这些建议将我引向了我正在弄乱的代码,我在这里做了一个小技巧:http://jsfiddle.net/jonnyplow/Lqj73ewv/

有什么想法吗?

【问题讨论】:

    标签: javascript jquery tags


    【解决方案1】:

    我不会使用jQuery来改变html标签结构。

    也许你可以像这样改变你的 for 循环。

    var groups = {};
    $(".product-list .product-list_item").each(function(i) {
      var c = $(this).attr("class");
      if (!groups[c]) groups[c] = [];
      groups[c].push(this);
    });
    
    /*
    for (var i in groups) {
      //$(groups[i]).wrapAll('<div class="product-list_row" />');
      $(groups[i]).wrapAll('<div class="product-list_row" />').each(function(i) {
        if (((i + 1) % 3) == 0)
          $(this).after('</div><div class="product-list_row">');
      });
    }*/
    
    for (var i in groups) {
      var group = groups[i];
      var count=0;
      var rowEles=[];
      for(var j=0;j<group.length;j++){
        rowEles.push(group[j]);
        count++;
        if(rowEles.length==3||count==group.length){
          $(rowEles).wrapAll('<div class="product-list_row" />');
          rowEles=[];
        }
      }
    }
    body {
      padding: 20px;
    }
    
    .product-list {
      margin-bottom: 10px;
      padding: 5px;
      border: 1px solid red;
    }
    
    .product-list_row {
      border: 1px solid #bbb;
      padding: 5px;
      margin-bottom: 10px;
    }
    
    .whatever {
      margin-bottom: 10px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <div class="product-list">
    
      <div class="product-list_item jackson">x</div>
      <div class="product-list_item jackson">x</div>
      <div class="product-list_item jackson">x</div>
      <div class="product-list_item jackson">x</div>
      <div class="product-list_item mason">x</div>
      <div class="product-list_item mason">x</div>
      <div class="product-list_item mason">x</div>
    
    </div>
    <div class="whatever">
      hello i'm different
    </div>
    <div class="product-list">
    
      <div class="product-list_item taylor">x</div>
      <div class="product-list_item taylor">x</div>
      <div class="product-list_item pencil">x</div>
      <div class="product-list_item pencil">x</div>
      <div class="product-list_item pencil">x</div>
    
    </div>

    【讨论】:

    • 你解决了!这非常适合我的需要!非常感谢您的帮助!!
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2011-10-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多