创建每 10 个项目添加的动态 div 元素

Posted

技术标签:

【中文标题】创建每 10 个项目添加的动态 div 元素【英文标题】:Create dynamic div element adding per 10 items 【发布时间】:2021-07-08 06:27:57 【问题描述】:

我的情况如下:

有未知数量的复选框需要添加到布局组件中,动态排列在一列中,每个布局项有 10 个复选框。

我设法将它们全部添加到单个 div 元素中,但我不知道如何动态添加 div。

这是我现在拥有的:

      <md-card v-if="loaded">
        <md-card-header>
          <div class="md-title">SETTINGS FOR COLUMNS</div>
        </md-card-header>
        <md-divider></md-divider>
        <md-card-content>

          <div>
            <b-form-checkbox
              v-for="option in options"
              v-bind:key="option.id"
              @input="changeOptions"
              :id="option.text"
              v-model="option.value"
              name="checkbox-1"
            >
               option.displayName 
            </b-form-checkbox>
          </div>

        </md-card-content>
      </md-card>

结果:

我想要完成的是将项目按列排列,每列有 10 个复选框。

这是期望的结果:

【问题讨论】:

【参考方案1】:

尝试使用计算属性对选项进行分页,例如:

computed:
  paginatedOptions()
        var matrix = [], i, k;

    for (i = 0, k = -1; i < this.options.length; i++) 
        if (i % 10 === 0) 
            k++;
            matrix[k] = [];
        

        matrix[k].push(list[i]);
    
  return matrix;         
 


然后在模板中渲染分页数组:

<div v-for="pOptions in paginatedOptions" style="display:flex">
  <div>
       <b-form-checkbox
              v-for="option in pOptions"
              v-bind:key="option.id"
              @input="changeOptions"
              :id="option.text"
              v-model="option.value"
              name="checkbox-1"
            >
               option.displayName 
            </b-form-checkbox>
  </div>           
</div>

上面的算法灵感来自this answer

【讨论】:

非常感谢!这就是我需要的。我只需要添加适当的 materialvue 类来调整布局 div 中的项目 :)【参考方案2】:

只需为此使用 css 网格:

<div class="checkboxes-grid">
...checkboxes here  
</div>
.checkboxes-grid 
  display: grid;
  grid-auto-flow: column;
  grid-template-rows: repeat(10, 1fr);

您可以在grid-template-rows 规则中管理每列需要多少项。

【讨论】:

感谢您的建议,但首先是 Boussadjra Brahim 的回答。由于需要在将对象附加到复选框本身之前对其进行操作,因此他的答案更加具体。但这仍然是一个非常干净的解决方案,所以竖起大拇指!

以上是关于创建每 10 个项目添加的动态 div 元素的主要内容,如果未能解决你的问题,请参考以下文章

jquery 向DIV动态添加元素

在运行时动态创建多个 UI 元素 - C# WPF

TVML 动态添加项目?

js动态创建多个div

如何在循环内创建动态 div 添加可拖动()?

使用 alpine JS 动态添加和删除 DOM 元素