包含jQuery ext函数的最佳实践是什么?

时间:2010-05-14 17:41:23

标签: jquery

目前我有一个名为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

在代码中添加了不同的插件并删除了验证插件

2 个答案:

答案 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