【问题标题】:jQuery add new div element for each 3 div element and for each 6 div elementjQuery为每3个div元素和每6个div元素添加新的div元素
【发布时间】:2018-07-24 21:40:16
【问题描述】:

首先我是jQuery 的新手,所以我的问题不相关,请原谅我。 我的 Dom 中有一些 div 元素,我正在尝试为我的产品制作书架。我关注了 this fiddle 并且效果很好。但我的产品来自MySQL,我在PHP 中使用foreach 循环解析它们。

我的 HTML 看起来像:

<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div>
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 

问题:我如何在each 3 &lt;div&gt;like 之后添加新的&lt;div&gt; 元素;

<div class="col-xs-12 shelf hidden-md hidden-lg"></div>

并在each 6 &lt;div&gt;like 之后添加新的&lt;div&gt; 元素;

<div class="col-xs-12 shelf"></div>

很快,需要的 HTML 输出;

<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div>
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<!-- Here Is The After 3rd div -->
<div class="col-xs-12 shelf hidden-md hidden-lg"></div>
<!-- Here Is The After 3rd div -->
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<div class="product-yarn col-xs-4 col-md-2">
  <a href="#" class="book-shelf"></a>
</div> 
<!-- Here Is The After 6th div -->
<div class="col-xs-12 shelf"></div>
<!-- Here Is The After 6th div -->

我在SO 中查看了一些问题,其中一些关于wrapping 的每3 个元素都有新元素。但我想添加新元素。

那么,有没有可能用 jQuery 来实现呢?

提前致谢。

PS:对不起,我的英语不好。

【问题讨论】:

标签: javascript jquery css-selectors


【解决方案1】:

您需要将.after() 与:nth-child() Selector 结合使用

.after()

在匹配元素集中的每个元素之后插入由参数指定的内容。

:nth-child()

选择作为其父级的第 n 个子级的所有元素。

脚本

$(document).ready(function () {
    $(".product-yarn:nth-child(3n)").after('<div class="col-xs-12 shelf hidden-md hidden-lg">after 3th div</div>');
    $(".shelf:odd").removeClass('hidden-md hidden-lg');
});

DEMO

$(document).ready(function() {
  $(".product-yarn:nth-child(3n)").after('<div class="col-xs-12 shelf hidden-md hidden-lg">after 3th div</div>');
  $(".shelf:odd").removeClass('hidden-md');
  $(".shelf:odd").removeClass('hidden-lg');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">1</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">2</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">3</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">4</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">5</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">6</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">1</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">2</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">3</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">4</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">5</a>

</div>
<div class="col-xs-4 col-md-2 product-yarn"> <a href="#" class="book-shelf">6</a>
</div>

【讨论】:

    【解决方案2】:

    更新:- 您需要的 jquery 代码是

        $(document).ready(function () {
        $(".col-md-2").each(function (index, value) {
            if ((index + 1) % 3 == 0) {
                $(this).after('<div class="col-xs-12 shelf hidden-md hidden-lg">after 3rd div</div>');
            }
            if ((index + 1) % 6 == 0) {
                $(this).after('<div class="col-xs-12 shelf">after 6th div</div>');
            }
        });
    });
    

    您也可以在此处查看工作演示 - http://jsfiddle.net/esrab6dd/1/ (在链接中添加文本用于演示目的,您可以将其删除)

    【讨论】:

    • 感谢您的回答。但是您的追加是在 div 中添加元素。看看我想要的 html 输出。
    • @HddnTHA - 我已经更新了我的解决方案以及演示,你能看看吗,我希望这就是你要找的 -jsfiddle.net/esrab6dd/1
    • 谢谢。但是添加元素后,它会计算添加的元素并将新元素添加到错误的位置
    • @HddnTHA - jsfiddle.net/esrab6dd/3,我在演示中添加了更多 div,第一个条件在每个第 6 个元素之后的每个第三和第二个循环之后添加一个所需的 div。它不采用添加元素的类。如果您仍然有问题,您可以提供所需的输出
    • 感谢您的回答,但我自己在其他答案的小提琴中找到了解决方案。看到这个; jsfiddle.net/ymgdngxd/2
    【解决方案3】:

    试试:

        $('div.col-xs-4').each(function (i, v) {
         var index = parseInt($(this).index());
         if ((i % 3 == 0) && (i % 6 != 0)) {
             $('<div class="col-xs-12 shelf hidden-md hidden-lg"></div>').insertBefore($(this));
         } else if (i / 6 != 0 && i % 6 == 0) {
             $('<div class="col-xs-12 shelf"></div>').insertBefore($(this));
         }
    
     });
     $('<div class="col-xs-12 shelf"></div>').insertAfter('div.col-xs-4:last');
    

    http://www.bootply.com/GITjvbYqiq

    【讨论】:

    • 现在它正在计算通过 jquery 添加的第 3 个 div,它插入第 6 个元素的位置错误。
    【解决方案4】:

    试试这个:

    $(document).ready(function(){
    
                total_elements = $(".col-xs-4.col-md-2").length;
                var append_div = '<div class="col-xs-12 shelf hidden-md hidden-lg">  </div>';
    
                for (var i=3; i<total_elements; i+3){
                        $(".col-xs-4.col-md-2").eq(i).append(append_div);
                }
            });
    

    【讨论】:

    • 感谢您的回答。但它给出了控制台错误Uncaught TypeError: $(...).length is not a function
    • @HddnTHA length 是一个属性而不是一个函数,因此你得到了答案
    • @HddnTHA 是的 Satpal 是对的。使用长度而不是长度()。我的错,对不起
    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多