2

我经常看到类似于某种形式的 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链。

4

2 回答 2

4

老实说,我不知道您在“每个开销”上在说什么。each实现如下:

each: function(fct) {
    for (var i = 0; i < this.elements.length; i++) {
       fct.apply(this.elements[i]);
    }
    return this;
}

没有开销!它利用了 JS 的原生属性,即闭包重新确定范围。对于一个元素,您会在一次赋值、一次算术比较和一次增量中失去性能,这三者都是原子操作。这是一个可以忽略不计的开销。

于 2013-05-23T19:46:58.350 回答
3

我不会担心额外的开销(或缺乏),但如果你真的想要这样的插件,它很容易编写。

$.fn.justme = function(callback){
    callback.apply(this[0]);
    return this;
};
于 2013-05-23T19:47:39.180 回答