0

注意:这是另一个问题的延续,我认为这是两个需要解决的独立问题。我目前也不确定如何准确地表达这个问题,所以我会尽力而为,当我更清楚时,我会重新表达我的问题以供将来参考。

我正在编写两个基本的 jQuery 插件,$.fn.query它们$.fn.build分别对数组进行排序,并创建要插入到文档中的 html 代码。我目前正在使用将用于显示视频的 Vimeo 视频 ID 对其进行测试。

$.fn.build有三个部分。首先它用单独的容器包装每个数组项,将它们构建成行(问题区域),然后最后将所有东西包装在一个容器中。(每个部分都是可选的)。

具体来说,问题来自这一行:$(tmp).add(newRow);虽然它是有效的 javascript。

if ( options.splitBy !== undefined && options.wrapRow !== undefined ) {
    var tmp = $([]),
        newRow = function(i) {
            $(build.splice( i, i + options.splitBy )).wrapAll( options.wrapRow ).parent();
        };

    for (var i = 0, l = build.length, a = options.splitBy; i < l; i += a) {
        $(tmp).add(newRow);
    }

    build = tmp;
    console.log(build);
}

见:http: //jsbin.com/upatus/2/edit

4

1 回答 1

1

我很确定您想使用该功能,而不是添加该功能本身。此外,您将希望tmp始终使用相同的对象,而不是将其包装到新的 jQuery 实例中而不是添加到原始实例中。尝试

tmp.add(newRow(i));

顺便说一句:如果你想构建一个数组,你应该使用

var tmp = [];

tmp.push(…);

现在我查看了另一个问题的代码。两个答案都是正确的,并且包含一些有效点:

  • splice是 jQuery 原型上的 Array 函数,并返回一个数组。(你现在已经修复了这个)
  • 您的query方法返回一个数组,但应该返回一个用于链接的 jQuery 实例
  • 您的build变量未初始化,但已使用

您应该真正选择是否要在函数内部使用数组或 jQuery 对象,而不是混合使用它们。

顺便说一句,您应该将函数重命名为更具描述性的名称。“构建”和“查询”非常模糊,可能与其他插件发生冲突。

于 2012-09-04T15:46:57.547 回答