zoukankan      html  css  js  c++  java
  • 我最喜欢的jQuery插件模板

      我使用jQuery已经有相当长的时间了,并且我会常常为它写一些插件(plugin)。我尝试过用不同的方式去写,现在这个模板是我最喜欢的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    ;(function($) {
      // multiple plugins can go here
      (function(pluginName) {
        var defaults = {
          color: 'black',
          testFor: function(div) {
            return true;
          }
        };
        $.fn[pluginName] = function(options) {
          options = $.extend(true, {}, defaults, options);
                 
          return this.each(function() {
            var elem = this,
              $elem = $(elem);
     
            // heres the guts of the plugin
              if (options.testFor(elem)) {
                $elem.css({
                  borderWidth: 1,
                  borderStyle: 'solid',
                  borderColor: options.color
                });
              }
          });
        };
        $.fn[pluginName].defaults = defaults; 
      })('borderize');
    })(jQuery);
     
    //下面是用法
    $('div').borderize();
    $('div').borderize({color: 'red'});

      以下是我喜欢这种模板的原因

      1. 你仍然可以访问里面的默认选项,即便它被重写了(简单地通过父属性的访问)

      2. 通过修改pluginName即可更改插件的名字。(这种方式对代码压缩也非常有利)

      第#1点非常强大,比如说我们希望复写这个方法,但是仍然希望保留原来的方法,我们可以看下面的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $('.borderize').borderize({
        testFor: function(elem) {
            var $elem = $(elem);
            if (elem.is('.inactive')) {
                return false;
            } else {
                // calling "parent" function
                return $.fn.borderize.defaults.testFor.apply(this, arguments);
            }
        }
    });
    We can even do this with regular properties like this
     
    var someVarThatMayBeSet = false;
    /* code ... */
     
    $('.borderize').borderize({
        color: someVarThatMayBeSet ? 'red' : $.fn.borderize.defaults.color
    });

      你有更好的模板吗?欢迎回复。

      原文 kolodny.github.io

  • 相关阅读:
    java中高级软件工程师面试总结
    失败的面试经历
    解决webstorm打开包含node_modules项目卡死问题
    通俗易懂的理解javascript闭包
    javascript实现silverlight pivotViewer控件
    javascript面向对象
    吐槽一下万网空间
    html5的Canvas
    前端CSS兼容的一些思路
    Win10 Ubuntu子系统访问Windows目录
  • 原文地址:https://www.cnblogs.com/ranzige/p/3611213.html
Copyright © 2011-2022 走看看