目前我有一个名为JQuery.ext.js的文件,我将其包含在所有页面中。在这个文件中,我有许多功能,可以执行以下操作,
(function($) {
/**
* Checks to see if a container is empty. Returns true if it is empty
* @return bool
*/
$.fn.isEmptyContainer = function() {
//If there are no children inside the element then it is empty
return ($(this).children().length <= 0) ? $(this) : false;
};
/**
* Strip html tags from elements
* @return jQuery
*/
$.fn.stripHTML = function() {
var regexp = /<("[^"]*"|'[^']*'|[^'">])*>/gi;
//Loop through all elements that were passed in
this.each(function() {
$(this).html($(this).html().replace(regexp, ""));
});
return $(this);
};
/**
* This function will check the length of a textarea and not allow the user to go beyond this length.
* You should use the onkeypress event to trigger this function
*
* @param event event This value should always be event when passing it into this function
* @param maxlength int The maximum amount of character that the user is allowed to type in a textarea
*/
$.fn.enforceMaxLength = function(event, maxlength) {
//Only allow the client code to use the onkeypress event
if(event.type == 'keypress') {
//If the client code does not pass in a maxlength then set a default value of 255
var charMax = (!maxlength || typeof(maxlength) != "number") ? 255 : maxlength;
//If the user is using the backspace character then allow it always
if(event.which == 8) { return true; }
//Else enforce the length
else { return ($(this).val().length <= charMax); }
}
//Will only get here if the event type is not keypress
return false;
};
})(jQuery);
还有其他办法吗?或者这是大多数人这样做的方式吗?
感谢任何帮助,Metropolis
EDITED
在代码中添加了不同的插件并删除了验证插件
答案 0 :(得分:2)
这完全取决于这些功能的范围。如果您在应用程序中经常使用非常通用功能列表,我会将它们放在单独的文件中,并在必要时包含它们。
但是这里有一个小注释:使用正确的术语,您实际上使用的是插件,而不是函数,并且您不符合创作指南。我不认为这是一个重大问题。 :)
此外,您从该文件中采样的函数似乎充当验证例程,因此我将它们放在单独的验证库中。更好的是,我会使用类似jquery-validate的东西,并使用$ .validator.addMethod()添加自定义验证方法。
修改强>:
至于我如何对jQuery函数/插件进行分组,我会像你的例子一样:
(function ($) {
// my list of functions, plug-ins, or classes; as needed by the application
}(jQuery);
但我会按功能对它们进行分组。例如:如果您有验证,格式化和动画功能/插件,我会创建3个文件:jquery.myvalidation.js,jquery.myformatting.js等。何时使用函数或插件的问题 - in,取决于你是否需要访问“当前”jQuery元素(使用插件),或者不是(使用函数)。
我在这里要强调的一点是,以模块化的方式对事物进行分组,以避免不必要的耦合并最大限度地重复使用。当你编写一个jQuery插件时,它应该处理一个非常特定的功能(如自动完成,scrollTo或验证插件)
答案 1 :(得分:0)
查看official plugin authoring guidelines。此外,Mike Alsup详细介绍了一种非常具体且有用的开发模式here。