比.data()更容易向jQuery对象添加方法?

时间:2011-02-17 00:22:03

标签: jquery

我想为特定的jQuery对象添加自定义方法:

$('#DOMelement').customFunc(param); // not a reality

目前,我有:

var customFunc = function(param) { 
    // do something special
}
$('#DOMelement').data('customFunc', customFunc);

然后我称之为:

var cF = $('#DOMelement').data('customFunc');
cF(param);

所有这一切都有效,但这很痛苦。有更好的解决方案吗?除了编写广泛的插件外?

4 个答案:

答案 0 :(得分:21)

听起来你想要做的就是制作一个插件。它根本不是很广泛。取自http://docs.jquery.com/Plugins/Authoring,您可以这样做:

(function( $ ){
    $.fn.myPlugin = function() {

        // Do your awesome plugin stuff here

    };
})( jQuery );

然后调用它很简单:

$('#DOMelement').myPlugin();

我不相信您应该将自定义函数放在“data”属性中。构建数据属性的目的是将自定义不可见数据嵌入到HTML 中。虽然我猜你可以把功能放在那里,但我不确定它是否合规。此外,您的所有JavaScript代码都将嵌入HTML元素中。

(取自http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data-with-the-data-attributes

  

作者可以包含内联客户端脚本或服务器端站点范围脚本的数据,以使用数据 - * =“”属性进行处理。这些保证永远不会被浏览器触及,并允许脚本包含脚本可以查找和处理的HTML元素的数据。

以下是关于使用datahttp://www.marcofolio.net/webdesign/html5_data-_attributes_are_great_and_you_know_it.html

的另一篇文章

答案 1 :(得分:9)

您的函数似乎与任何特定元素无关,所以为什么不将它存储在某个全局命名空间中。

如果你不想创建另一个,你可以借用jQuery,如果你小心不要覆盖任何东西:

jQuery.cF = function(param) {
    // do something special
};

$.cF(param);

答案 2 :(得分:0)

您可以使用jQuery.extend()

在你的特定情况下,你会延长$,所以你可以只做帕特里克的方式,只要你小心不要覆盖现有的功能。

答案 3 :(得分:0)

试试这个:

$.fn.call = function(){};

然后为特定元素创建一个函数:

$('#some_id .some-class').call.myCustomFunction = function(arg1,arg2){ ... };

现在,当你想要打电话时:

$('#some_id .some-class').call.myCustomFunction('a','b');