讓我們從一個減少對其他:
$.fn.myplugin = function() {
return $(this).each(function() {
return $(this).bind('click', function() {
console.log('Hi');
});
});
};
當您啓動功能this
是一個jQuery對象,所以$(this)
不買任何東西,它很可能會成爲:
$.fn.myplugin = function() {
return this.each(function() {
return $(this).bind('click', function() {
console.log('Hi');
});
});
};
所以你說「對於jQuery對象中的每個元素,創建一個jQuery對象並將一個事件綁定到該對象。「
如果您在bind
看,它調用on
,執行一些邏輯,最後做這一行:
return this.each(function() {
jQuery.event.add(this, types, fn, data, selector);
});
這意味着它要在事件應用於該jQuery對象的每一個元素,所以你實際上是在說:
所以你說
「對於jQuery對象中的每個元素,創建一個jQuery對象,併爲
在jQuery對象中的每一個元素事件綁定到該元素。」
您現在循環兩次,一次在N
元素的列表中,然後在1個元素的列表中循環N
次。你實際上可以直接全部綁定:
$.fn.myplugin = function() {
return this.bind('click', function() {
console.log('Hi2');
});
};
而這當然是最終的代碼。
提示:**使用第二個。** – Ryan 2012-07-12 16:47:46
@minitech:爲什麼?一個真正的插件最有可能不僅僅是綁定一個事件。然後,爲集合中的每個元素分別設置一個範圍可能會更好。但是,在**這個特定的情況**你是對的。 – ThiefMaster 2012-07-12 16:52:27
您可能想知道爲什麼第二種方法在元素堆棧包含多個匹配元素的情況下工作。在內部,jQuery調用所有匹配元素鏈中規定的任何方法。換句話說,迭代仍然完成,但在內部。 – Utkanos 2012-07-12 16:45:53