如何基于循环包装元素,加上模数?

问题描述 投票:0回答:1

我需要动态地在一些HTML中包装<div>的每个第三个实例,并且,如果有一个余数,以类似的方式包装少于三个的数量,那么它将作为“换行”的最后一个实例。

将每个第三个实例包装起来非常基本:

var divs = $(".someclass"); 
var limit = 10;
for(var i = 0; i < limit; i+=3) {
    divs.slice(i, i+3).wrapAll("<div class='classwrap'></div>");
}

但是,因为在这个例子中有一个余数为1,而且我在其他地方动态生成HTML(这里的演示太复杂了,但是这个方面工作正常),这个例子中的结果创建了四个.classwrap divs包装三个.someclass divs的集合,给我12个.someclass divs,但不是十个。

我在这个例子中想要实现的确实是四套.classwrap divs,但是前三个包装套装每个包含三个.someclass divs,然后得到第四个.classwrap div,其中只包含一个.someclass div,总数十个.someclass divs,如限制变量所示。

我试图在我的循环中的某个地方潜入模数运算符,但它总是抛出数学并相应地进行包装。

javascript jquery for-loop modulus
1个回答
1
投票

以下是我认为您正在寻找的答案。您需要确定最后一次分组的时间。然后使用modo值仅包装那么多部分。

Updated fiddle

var divs = $(".someclass"); 
var limit = 10;//divs.length;
var grouper = 3
var modo = limit % grouper;
for(var i = 0; i < limit; i+=grouper) {
    var offset = grouper;
    if(modo + i === limit) {
        offset = modo;
    }
    divs.slice(i, i+offset).wrapAll("<div class='classwrap' style='background-color:#def;'></div>");
}

要么

用以下字母替换您的初始选择:Fiddle for slice

var limit = 10;
var divs = $(".someclass").slice(0,limit); 
© www.soinside.com 2019 - 2024. All rights reserved.