自定义JQuery元素

时间:2011-01-11 08:35:40

标签: javascript jquery

将方法添加到JQuery元素是不可取的吗?

例如:

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

更新

为了澄清,我正在开发一个JS驱动的应用程序,它将JSON数据绑定到本地JS对象,这些对象封装了用于操作实际底层DOM元素的业务逻辑。对象当前存储对其关联的HTML元素的引用。我想我实际上可以通过引用添加所需方法的引用来合并jquery元素的特定实例和它的逻辑。

3 个答案:

答案 0 :(得分:2)

嗯,这没有什么本质上的错误。然而,这是毫无意义的。例如:

$('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
};

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

或者你可以创建一个jQuery插件。您可以通过以下方式定义插件:

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

使用$('body').someMethod();

进行调用