将每4个乘积包裹在一个div



我需要一些帮助。我正在构建自己的自定义BigCartel主题,遇到了以下问题:目前我在主产品页面上列出了我的所有产品(数量不多),我正试图将每4个产品包装在一个div中。基本上我有

<div class="product"></div>
<div class="product"></div>
<div class="product"></div>
<div class="product"></div>
<div class="product"></div>

我想要的最终结果是

<div class="wrap">
  <div class="product"></div>
  <div class="product"></div>
  <div class="product"></div>
  <div class="product"></div>
</div>
<div class="wrap">
  <div class="product"></div>
</div>

我不知道该如何使用他们的模板语言来实现这一点。

使用jQuery:

var wraps = $('.wrap');
$('.products').each( function(e, i){
  wraps[Math.floor(i/4)].appendChild(e);
})

jQuery将返回所有产品的列表(HTMLCollection),迭代该列表,您可以参照列表索引将您的项目包装在div中。

使用模板语言,我认为可以这样做:

 <div class="wrap">
 {% for product in products.all %}
   <div class="product ">
     {{ product.name }} </div>
   {% if forloop.index % 4 == 0 %}
     </div>
     <div class="wrap">
   {% endif %}
 {% endfor %}
 </div>

我试着变得聪明一点。假设您有几个这样的.wrap元素。

var products = document.querySelectorAll('.products'), 
    wraps = document.querySelectorAll('wrap');
[].forEach.call(products, function(e, i){
  wraps[Math.floor(i/4)].appendChild(e);
})

我意识到这个问题有点老了,但我发现公认的答案不起作用。

这就是我如何让它在模板语言中工作的(有点?液体):

{% for product in products %}
  {% assign zeroindexmodfour = forloop.index0 | modulo: 4  %}
  {% assign indexmodfour = forloop.index | modulo: 4  %}
  {% if zeroindexmodfour == 0 %}
    <div class="wrap">
  {% endif %}
  <div class="product"></div>
  {% if indexmodfour == 0 or forloop.last %}
    </div>
  {% endif %}
{% endfor %}

相关内容

  • 没有找到相关文章

最新更新