我写了一个这样的插件来抓取一个集合的子集:
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对象吗?这是微观优化吗?
答案 0 :(得分:3)
jQuery构造函数还接受一个DOM元素数组,并将它们包装在jQuery对象中。所以,如果你反对使用.add,你可以将它们全部推送到一个数组(作为dom元素),然后立即包装整个东西。
我没有进行过性能测试,看看会更快。