2

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

<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>

我不确定我应该如何使用他们的模板语言来做到这一点。

4

4 回答 4

3

使用 jQuery:

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

jQuery 将为所有产品返回一个列表(HTMLCollection),迭代此列表,您可以将您的项目包装在 div 中,引用列表索引。

于 2015-03-17T20:01:55.797 回答
2

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

var products = document.querySelectorAll('.products'), 
    wraps = document.querySelectorAll('wrap');
[].forEach.call(products, function(e, i){
  wraps[Math.floor(i/4)].appendChild(e);
})
于 2015-03-17T19:54:28.147 回答
2

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

 <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>
于 2015-03-24T01:48:57.170 回答
0

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

这就是我让它在模板语言中工作的方式(有点像?Liquid):

{% 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 %}
于 2016-10-14T06:59:18.370 回答