我编写了一个像这样的插件来获取集合的子集:
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 对象吗?这是微优化吗?
最佳答案
jQuery 构造函数还接受 DOM 元素数组并将它们包装在 jQuery 对象中。因此,如果您反对使用 .add,您可以将它们全部推送到一个数组(作为 dom 元素),然后一次包装整个内容。
我还没有运行性能测试来看看什么会更快。
关于javascript - 创建 jQuery 集合的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172501/