51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1726|回复: 1
打印 上一主题 下一主题

编写jquery 插件

[复制链接]
  • TA的每日心情
    无聊
    前天 09:07
  • 签到天数: 436 天

    连续签到: 5 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2019-1-10 15:26:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    一般情况我们在编写基于jquery插件时都会默认用到一下的格式!



    jQuery插件的机制
    JQuery提供了2个用于扩展JQuery功能的方法。即:

    • ①jQuery.fn.extend()
    • ②jQuery.extend()

    第一个就是我们前面说插件类型的对象方法,第二个就是指jquery类对象方法。

    jQuery.extend()在插件中友一个很重要的功能是扩展已经有的object的对象。



    jQuery提供了2个供用户扩展的‘基类’ – $.extend和$.fn.extend.

    $.extend 用于扩展自身方法,如$.ajax, $.getJSON等,$.fn.extend则是用于扩展jQuery类,包括方法和对jQuery对象的操作。为了保持jQuery的完整性,我比较 趋向于使用$.fn.extend进行插件开发而尽量少使用$.extend.


    尽量使用Id选择器,jQuery的选择器使用的API都是基于getElementById或getElementsByTagName,因此可以知道 效率最高的是Id选择器,因为jQuery会直接调用getElementById去获取dom,而通过样式选择器获取jQuery对象时往往会使用 getElementsByTagName去获取然后筛选。



    jQuery插件代码格式:
    // 可以去掉开头的 ; (分号),国外的开发人员编写的插件时的一种习惯
    ;(function($){
         $.fn.pluginName = function() {     
               // Our plugin implementation code goes here.     
         };
    })(jQuery);   

    //传入一个jQuery的参数(其是就是匿名函数的参数$的值为jQuery),是因为该方法是对jQuery库的扩展,那么在该方法体内就可以调用jQuery库中的函数;若不传入,则无法调用jQuery库



    虽然在jQuery命名空间中,我们禁止使用了大量的javaScript函数名和变量名。

    但是仍然不可避免某些函数或变量名将于其他jQuery插件冲突,因此我们习惯将一些方法封装到另一个自定义的命名空间。


    在编写插件时,要注意:

    ①jQuery.fn.extend()

    ②jQuery.extend() 这两种方式。


    一般情况最好选用$.fn.插件名=function(){}

    要注意引用$.fn.extend,确保不会与jquery自带里面的对象方法重名。

    $.fn.extend({

    方法名:function(){}

    });



    ;(function($){

    $.fn.yourName = function(options){  
    //各种属性、参数  
    }  
    var options = $.extend(defaults, options);  
    this.each(function(){  
    //插件实现代码  
    });  
    };  

    })(jQuery);




    这样编写的好处:


    1. 使用闭包:

    (function($) {
      // Code goes here
    })(jQuery);


    这是来自jQuery官方的插件开发规范要求,使用这种编写方式有什么好处呢?

    a) 避免全局依赖。

    b) 避免第三方破坏。

    c) 兼容jQuery操作符'$'和'jQuery '



    编写插件实例:

    jQuery.expr[":"]实际上就是一个选择器!:

    //插件编写
    ;(function($) {
    $.extend(jQuery.expr[":"], {
    between : function( a , i ,m ) {
    var tmp=m[3].split(","); //将传递进来的m[3]以逗号为分隔符,切成一个数组
    return tmp[0]-0<i&&i<tmp[1]-0;
    }
    });
    })(jQuery);

    //插件应用
    $(function(){
    alert("执行前");
    $("div:between(2,5)").css("background","white");
    alert("执行后");
    })


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-6-23 20:00 , Processed in 0.081630 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表