0

我有这个函数可以将特定数量的 div 包装成一行。

function rowCreation(a) {
    a = $.cookie("col-layout");
    if(typeof(a)==="undefined") a = 3;

    if ($("div.gallery-item").parent().is("div.row")) {
        $('div.row').replaceWith(function () {
            return $('div.gallery-item', this);
        });
    }
    var divs = $("section#gallery-wrapper div.gallery-item");
    for (var i = 0; i < divs.length; i += a) {
        divs.slice(i, i + a).wrapAll("<div class='row'></div>");
    }
}

但是似乎出了点问题,我无法弄清楚到底是什么。第一行是正确形成的,它包含a元素。但是所有剩余的 div 都放在一行中,即使a它们不止一个!

4

1 回答 1

3

我认为问题在于第一行:

a = $.cookie("col-layout");

您的函数rowCreationa其视为一个数字,但 cookie 将其作为字符串输出。所以,当你这样做时,

for (var i = 0; i < divs.length; i += a) {
    divs.slice(i, i + a).wrapAll("<div class='row'></div>");
} 

当 i = 0 时,

您要求在 1 和“05”(concat i + “a”)之间对数组进行切片,这很好,因为这些存在。所以没有问题。

当 i = 5 时,

您要求将数组在 5 和“15”(concat i + “a”)之间进行切片,因此这会删除所有数组并将其包装在一个.row. 这就是为什么它对你有问题。

尝试将检索到的 cookie 解析"col-layout"为类型变量Number,如下所示:

a = parseInt($.cookie("col-layout"), 10);

parseInt关于这里的更多信息。

于 2013-07-06T22:55:12.553 回答