2015-10-21 29 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

相关问题