2011-01-11 145 views
3

将方法添加到JQuery元素是否不合适?自定义JQuery元素

如:

var b = $("#uniqueID"); 
b.someMethod = function(){}; 

更新

只是为了澄清,我在一个JS驱动的应用程序,是有约束力的JSON数据封装业务逻辑操纵本地JS对象工作实际的底层DOM元素。这些对象当前存储对其关联的HTML元素的引用。实际上,我可以通过引用add添加所需的方法来合并jQuery元素的特定与其逻辑。

+1

你可以扩展你在这里实际试图达到什么吗? –

回答

2

$.fn.someMethod = function(options) { 
    # ... 
}); 

称呼它,没有什么内在的错误吧。然而,这是毫无意义的。例如:

$('body').someMethod = function(){}; 
console.log($('body').someMethod); // undefined 

您只将新功能附加到该选择,而不是附加到该元素的所有选择。

你应该做的,而不是为一个新的功能添加到jQuery.fn,这是jQuery.prototype快捷方式:

jQuery.fn.someMethod = function() { 
    if (this[0].nodeName == 'body') { 
     // do your function 
    } 

    return this; // preserve chaining 
}; 
0

或者你可以创建一个jQuery插件。您可以定义一个插件是这样的:使用$('body').someMethod();

2

的问题是,你的功能将是非常短暂的。进一步的需求,它将会消失。您可以通过$ .fn.someMethod = function(){}扩展jQuery对象本身,并且此方法将适用于所有查询。

$.fn.someMethod = function() {} 
var b = $("body"); 
b.someMethod();