jquery对象上的持久化函数

时间:2011-05-05 04:05:49

标签: jquery

我知道您可以使用.data()将内容存储在jQuery对象中,无论何时找到该元素,无论使用何种选择器,您的数据都将存在。

您还可以使用.sub()使用自己的函数创建jQuery分支,并使用该子选择元素。

但有没有办法简单地说$("#something").foo = function() { ... };,然后再去$("#something").foo();

这似乎不是一个很难写的插件。对我来说,这似乎是一个很棒的工具。有什么理由我找不到它吗?

2 个答案:

答案 0 :(得分:0)

jQuery对象不是持久的,这意味着每次你说$(“#something”)时都会创建一个新的jQuery对象。这意味着,它实际上每次都会搜索Dom树,以获取id = something的元素。

如果你想为它添加一个函数,你可以将jQuery对象存储在一个变量中,稍后再引用该变量:

var something = $("#something");
something.foo = function() { ... }
// Later on
something.foo();

您也可以通过自己的插件轻松扩展jQuery的行为,

jQuery.fn.foo = function() {

  // Do your awesome plugin stuff here

};

然后你可以直接拨打电话,如$(“#something”)。foo();

答案 1 :(得分:0)

这是不可能的,因为每次使用$函数时,它都会创建一个 new jquery对象,因此您将丢失添加的属性或方法。

$("#something").foo = function() { ... }
$("#something").foo(); //Error. foo is not a function

但是,您可以将此方法直接添加到dom元素(但不建议这样做),如下所示:

$("#something")[0].foo = function() { ... };
$("#something")[0].foo(); //foo() gets executed!!

但你必须小心,你可以覆盖现有的dom方法或属性。例如,如果您将方法命名为“innerHTML”,则会覆盖该属性。这就是为什么不推荐它。

希望这会有所帮助。干杯