从数组创建DOM节点

时间:2012-09-04 15:41:19

标签: javascript jquery arrays object dom-node

  

注意:这是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);
}
  

请参阅:http://jsbin.com/upatus/2/edit

1 个答案:

答案 0 :(得分:1)

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

tmp.add(newRow(i));

BTW:如果你想建立一个数组,你应该使用

var tmp = [];

tmp.push(…);

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

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

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

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