注意:这是another question的延续,我认为这是两个需要解决的问题。我目前还不确定如何准确地说出这个问题,所以我会尽力而为,当我得到更清晰的时候,我会重新提出我的问题以供将来参考。
我正在编写两个基本的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);
}
答案 0 :(得分:1)
我很确定你想要使用这个函数,而不是添加函数本身。此外,您将希望始终使用相同的tmp
对象,而不是将其包装到新的jQuery实例中,而不是添加到原始jQuery实例中。尝试
tmp.add(newRow(i));
BTW:如果你想建立一个数组,你应该使用
var tmp = [];
和
tmp.push(…);
现在我看了另一个问题的代码。两个答案都是正确的,并包含一些有效点:
splice
是jQuery原型上的一个Array函数,返回一个数组。 (你现在已经解决了这个问题)query
方法返回一个数组,但应该返回一个用于链接的jQuery实例build
变量未初始化,但已使用您应该选择是否要在函数内部使用数组或jQuery对象,而不是混合它们。
顺便说一下,您应该将您的功能重命名为更具描述性的名称。 “构建”和“查询”非常模糊,可能会与其他插件发生冲突。