內部的jQuery調用此爲$("sel").each(function(){});
if (isObj) {
for (name in object) {
if (callback.call(object[ name ], name, object[ name ]) === false) {
break;
}
}
}
而且eq
是一個簡單的切片:
eq: function(i) {
return i === -1 ?
this.slice(i) :
this.slice(i, +i + 1);
}
所以,你可以創建一個新的each
函數,而不是object[name]
,會做一個object:eq(i)
$("*").slice(1,2).toSource() == $("*").eq(1).toSource();
所以要創建自己的each
:
$.fn.each2 = function(callback)
{
for (var i = 0; i < this.length; ++i) {
callback.call(this.eq(i), i, this.eq(i))
}
};
$("*").each2(function(i, obj) {
alert(obj); // now obj is a jQuery object
});
似乎each3
快於each2
http://www.jsfiddle.net/m7pKk/2/
$.fn.each2 = function(callback)
{
for (var i = 0; i < this.length; ++i) {
var jObj = this.eq(i);
callback.call(jObj, i, jObj)
}
};
$.fn.each3 = function(callback)
{
for (var i = 0; i < this.length; ++i) {
var jObj = $(this[i]);
callback.call(jObj, i, jObj)
}
};
See this example on jsFiddle with performance measurement.
正是我想說的,再加上如果first()沒有返回一個jQuery對象,你將不得不使用$($(selector).first()),這與jQuery的簡潔目標有些衝突。 – 2010-10-16 15:25:48
好吧,我的印象是,$(「。foo」)讓jQuery對象以_開頭,當它們通過'each()'時,它們被分解爲「基本」DOM對象。我想這不是什麼在這裏:) – badp 2010-10-16 15:34:41
@Jon - 這是不正確的。 '$(selector).first()'* does *返回一個jQuery對象。你不應該用'$($(selector).first())'來包裝它。當我們傳遞一個數字時,返回一個純DOM元素的唯一jQuery方法是'.get(0)'。沒有數字參數,你會得到一個DOM元素數組。 – user113716 2010-10-16 16:20:29