创建jQuery集合的更好方法

时间:2011-11-17 18:43:43

标签: javascript jquery plugins

我写了一个这样的插件来抓取一个集合的子集:

jQuery.range = function(start, end, includingTheLast) {
    var ret = $([]), i = 0;

    while (!this.eq(i).is(start) && i < this.length)
        i++;

    for (; i < this.length && !this.eq(i).is(end); i++) {
        ret = ret.add(this[i]); // we can do better than this
    }
    if (includingTheLast) ret = ret.add(this[i]); // we can do better than this
    return this.pushStack(ret, 'range');
}

它的使用方式如下:

$('a').range(':eq(2)', '#stop')...

ret = ret.add(this[i])似乎很慢,这是一个聪明的方法吗?我应该构建一个数组然后把它变成一个jQuery对象吗?这是微观优化吗?

1 个答案:

答案 0 :(得分:3)

jQuery构造函数还接受一个DOM元素数组,并将它们包装在jQuery对象中。所以,如果你反对使用.add,你可以将它们全部推送到一个数组(作为dom元素),然后立即包装整个东西。

我没有进行过性能测试,看看会更快。

参考:http://api.jquery.com/jQuery/