我经常看到jQuery代码类似于某种形式的.each()
,它有一个ID选择器:
$('#selector').each(function(index, element){
// do something
});
现在,了解只有一个具有该ID的元素,但我想维护jQuery对象的链能力,除了.each()
之外还有其他一些选项。 在没有.each()
这里的开销的情况下有什么方法吗?
(我知道它的挑剔,因为每个内部for
的开销并不大)
像这个例子假的“justme”:
$('#selector').justme(function(myElement){
alert(myElement.id);
// do something
}).parent('div')...
我知道有例如:
$('#selector').eq(0)
$('#selector')[0]
但是这些缺乏功能或打破了jQuery链。
答案 0 :(得分:4)
老实说,我不知道你在谈论“每个开销”。 each
的实施方式如下:
each: function(fct) {
for (var i = 0; i < this.elements.length; i++) {
fct.apply(this.elements[i]);
}
return this;
}
没有开销!它利用JS的本机属性,即关闭重新范围。对于一个元素,您在一个赋值,一个算术比较和一个增量中失去了性能,所有三个都是原子操作。这是一个微不足道的开销。
答案 1 :(得分:3)
我不担心额外的开销(或缺乏开销),但如果你真的想要这样的插件,那么写起来很容易。
$.fn.justme = function(callback){
callback.apply(this[0]);
return this;
};