2012-09-04 48 views
0

注意:这是another question的延续,我决定是两个独立的问题需要解决。我目前还不确定如何描述这个问题,所以我会尽我所能,当我得到更多的清晰度时,我会重述我的问题以供将来参考。从阵列创建DOM节点

我正在写两个基本的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

+0

有一点注意:使用['add'](http://api.jquery.com/add/)时,您需要使用返回值。 – Yoshi

回答

1

我敢肯定,你想要使用的功能,而不是添加的功能本身。此外,您将希望在整个时间内使用相同的tmp对象,而不是将其包装到新的jQuery实例中,而不是添加到原始的实例中。尝试

tmp.add(newRow(i)); 

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

var tmp = []; 

tmp.push(…); 

现在我已经看过了代码与其他题。这两个答案都是正确的,并含有一些有效点:

  • splice是jQuery的原型阵列功能,并返回一个数组。 (您已经fiexd现在这样)
  • query方法返回一个数组,而应返回一个jQuery实例链接
  • build变量未初始化,但使用

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

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

+0

这有帮助,但它仍然没有工作:http://jsbin.com/upatus/4/edit –

+0

你应该学习如何使用调试器。或者,jsbin有一个控制台和一些自动警告。 – Bergi