将函数附加到元素,$ .fn.test vs $ .bind(' test',funct ... vs $ .data(' test',funct)

时间:2015-10-21 05:59:14

标签: jquery

如果你想在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 个答案:

答案 0 :(得分:1)

#1根本没有工作,jQuery 实例上没有fn属性fnjQuery)函数本身有一个$属性,它指的是原型所有 jQuery实例继承。

#2更恰当地称为自定义事件。仅仅附加功能就太过分了。但是,如果您可能需要事件子系统的功能,那么它很有用。

#3很简单,是特定于元素的,并且利用了jQuery的数据缓存处理和处理。

#4将该函数添加到jQuery原型中,这意味着它将在所有 jQuery实例上可用,而不仅仅是那个,这可能是过度的。

为了完善你的选择,你也可以(称之为#5):

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

直接将该函数作为expando属性附加到元素。我不推荐使用data; data使用jQuery的expando,它可以最大限度地减少冲突的可能性。

在这五个选项中,#3似乎是最好的选择 如果 您确实需要将功能附加到DOM元素。