• jquery1.9.1自定义插件简述


          5月1日 呆在实验室 接着学习的脚步 记录学习的脚步 还有2个月 学生生涯即将结束 十分珍惜此时的宁静 看书、听歌、打球、喝酒 时间只受自己支配 真想爆一句粗口 太XX爽了 呵呵 

        好吧 还是回到记录的脚步上来


      按照jquery官方所说 

      jquery插件机制是一种用于扩展jquery原型对象方法的简单方式,通过扩展原型对象,可以让jquery的所有对象都继承你自定义的方法。

        在自定义插件之前 有几个知识点 我们是必须要搞清楚的

    1.iife--立即执行函数表达式

    看看官网解释


        

    简单地说 就是定义一个表达式 不过这个表达式中包含一个函数 

    我们知道在script的范围里 只要不是定义在函数中的表达式 在script第一次加载的时候都会从上至下的执行

    所以这个IIFE的表达式也会立即执行  

    看个例子

    <!DOCTYPE html>
    <html><head>  
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    </head><body> <div id="log"></div> 
    <script>
    (function(a){
    	$("#log").text("使用立即调用函数表达式"+a);
    })(5);
    </script> 
    </body></html>

    界面输出


    通过输出可以看到 IIFE执行了 上面的例子中  看到IIFE的写法如下

    (function(形参){需要处理的代码})(实参);


    2.$.与$.fn,的区别

    $.相当于jquery的Object类的静态部分,此部分中的方法与属性都无需jquery对象即可直接使用 例如 $.extend()

    $.fn.相当于jquery的Object类的实例部分,此类中的方法 都需要先有jquery对象之后 才能使用$.fn.的方法 例如 $("a").attr()

    还有一点需要注意 jquery的所有对象都继承了 Object类  

    所以 前面所说的 通过扩展愿意模型 可以让jquery的所有对象都继承你自定义的方法  即是往Object的静态部分和实例部分添加方法和属性即可


    有了上面的知识 自定义插件就比较简单了 

    不过 有些准则可能需要注意一下

    a:在你自定义的插件中,最好只留一个对外的方法接口 这样可以避免过多的方法名与其他插件的方法重复 通过传递的参数 决定执行自定义插件中的哪一块代码

    b:在自定义的插件方法中 最好把jquery对象返回 这样能够保持jquery的链式操作

    c:在自定义的插件中 提供一些默认属性 同时也可让用户自定义属性的值 让你的插件更具扩展性



    好吧 啰嗦了那么多 看看实例吧 

    在此插件中 封装一个遍历多层json对象的方法  将json对象转换为特定的文本格式显示

    1.新建一个iteratorJson.js文件 封装的代码如下

    //建立一个立即调用函数表达式 封装自定义的方法
    //这样可以使封装的方法内部的变量、表达式与外部的变量、表达式互补干扰
    //下面的jQuery为实参 $为形参 这样做的目的是保持代码的一致性 与
    (function($){
    	//往jquery的Object的实例部分添加方法
    	$.fn.iteratorJson=function(choice,data){
    		//choice用于判断是否深层迭代json对象
    		if(choice===true){ //进行深层迭代 即将json对象中的json对象都转换为文本
    			return iteratorDeep(data);
    		}else{
    			return iteratorNonDeep(data);
    		}
         };
    	 
        //下面定义的函数不对外调用 
    	    //深度迭代
    		function iteratorDeep(data){
    		//定义数组
    			var content=[];
    			$.each(data,function(key,val){
    				var next=key+":";
    				next+=$.isPlainObject(val)?iteratorDeep(val):val;
    				//向数组中添加内容
    				content.push("["+next+"]");
    			});
    			//转换数组为文本
    			return "{"+content.join(",")+"}";
    		}
    	
    		//不进行深度迭代
    	    function iteratorNonDeep(data){
    			var content=[];
    			$.each(data,function(key,val){
    				var next=key+":"+val;
    				content.push("["+next+"]");
    			});
    			return "{"+content.join(",")+"}"; 
    		}
        
    	//默认设置
    	var defaults={
    		"background-color":"red",
    		"font-size":"20"
    	};
    	
        $.fn.chainCss = function(options){
    	//将default和options的设置值合并到settings里面
    		var settings=$.extend({},defaults,options);
    		//this指的是jquery对象 因为新添加的方法chainCss也属于jquery对象的方法
    		return this.css(settings);
    	};
    	
    	
    })(jQuery);

    2.测试界面 iteratorJsonTest.html

    <html>
    <head>
    	<script type="text/javascript" src="jquery-1.9.1.js"></script>
    	<!-- 引入自定义的插件 -->
    	<script type="text/javascript" src="iteratorJson.js"></script>
    	<script type="text/javascript">
    		$(function(){
    			//创建数组
    			var testJson={name:"刘德华",age:54,loveFemale:{name:"朱丽倩",age:50}};
    			//测试添加的方法
    			$("#disJson").text($(document).iteratorJson(true,testJson));
    			$("#disJson2").text($(document).iteratorJson(false,testJson));
    			//测试新添加的方法
    			console.log($("#disJson").chainCss({"background-color":"purple"}).width());
    		});
    	</script>
    </head>
    <body>
    	<div id="disJson"></div>
    	<div id="disJson2"></div>
    </body>
    </html>

    3.效果如下 



  • 相关阅读:
    各种贴图
    d3d11devicecontext
    小记2
    Tom Ryaboi
    Tessellation
    关于图形学
    第一章实验
    控制输入框只接收数字及小数点
    JQuery控制文本框是否可以输入
    SQLSERVER中查询一个存储过程使用到的地方
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275576.html
Copyright © 2020-2023  润新知