2015-10-21 31 views
1

如果你想在jQuery中附加一個函數給元素,你可以?基本上就兩種以下三種方式有什麼利弊,每個的利弊

1)

var a = $('a') 
a.fn.testFunc = function() {...}; 
$(a).testFunc(); 

這一次是錯了,請忽略;見#4以下

2)

$('a').bind('testFunc',function() {...}); 
$('a').trigger('testFunc'); 

3)

$('a').data('testFunc', function(){...}); 
$('a').data('testFunc')(); 

4)(加入以替代#1)

$.fn.testFunc = function() {...}; 
$(a).testFunc(); 
+1

第一個是無效的 – charlietfl

+2

編輯問題的方式使發佈的答案失效並不是如何在SO上完成的。我相應地調整了你的編輯。 –

+0

謝謝,我找不到線路。 – Zoheir

回答

1

#1將不工作,不存在fn屬性上jQuery 實例jQuery$)函數本身有一個fn屬性,它指的是原型全部 jQuery實例繼承。

#2更適當地稱爲自定義事件。僅僅附加一個函數就太過分了。但是,如果您可能需要事件子系統的功能,這很有用。

#3很簡單,是元素特定的,並利用jQuery的數據緩存處理和處置。

#4將功能添加到jQuery原型,這意味着它將可用於所有所有 jQuery實例,而不僅僅是那個,這可能是矯枉過正。

只是爲了圓了你的選擇,你也有(稱之爲#5):

$("a")[0].testFunc = function(){ /*...*/}; 
$("a")[0].testFunc(); 

直接附加功能的元素,作爲expando屬性。我不會推薦使用data; data使用jQuery的expando,這可以最大限度地減少衝突的可能性。

這五個選項中,#3似乎如果你真的需要一個功能附加到DOM元素你最好的選擇。

+0

感謝您的完整答案 – Zoheir

相關問題