我想为特定的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);
所有这一切都有效,但这很痛苦。有更好的解决方案吗?除了编写广泛的插件外?
答案 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元素中。
作者可以包含内联客户端脚本或服务器端站点范围脚本的数据,以使用数据 - * =“”属性进行处理。这些保证永远不会被浏览器触及,并允许脚本包含脚本可以查找和处理的HTML元素的数据。
以下是关于使用data
:http://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');