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.效果如下 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
jquery中文汉化版 (function( window, undefined ) { //不要做这个因为各自的应用程序包括ASP.NET查找 // the stack via arguments.caller.callee and Firefox dies if //你尝试查找通过“精确使用”呼叫链接(#13335) //支持:火狐浏览器 18+ //“精确使用”; var //deferred对象被使用在DOM(Document Object Model翻译:文档对象模型)准备之时 //deferred(延迟)对象:从jQuery 1.5.0版本开始引入的一个新功能 //在DOM准备好时调用 readyList, //一个中心引用对于jQuery根文档 //对根jQuery对象的主要引用 rootjQuery, //支持:IE9之前的版本 // For `typeof node.method` instead of `node.method !== undefined` core_strundefined = typeof undefined, // Use the correct document accordingly with window argument (sandbox) document = window.document,//window文档赋值给变量document location = [removed], // Map over jQuery in case of overwrite(不确定,待修正,希望高人帮忙翻译一下) //在jQuery上绘制写在上面的实例 //防止被覆盖 _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, //将window正则表达式符号$赋值给变量_$ //[类]:成双类型 class2type = {}, //在贮存区被删除数据ID的列表,我们能够再用他们 core_deletedIds = [], core_version = "1.9.1", //保存一个参考给一些核心的方法 //为核心方法创建引用 core_concat = core_deletedIds.concat, core_push = core_deletedIds.push, core_slice = core_deletedIds.slice, core_indexOf = core_deletedIds.indexOf, core_toString = class2type.toString, core_hasOwn = class2type.hasOwnProperty, core_trim = core_version.trim, //规定一个jQuery本地代码 //构建jQuery对象 jQuery = function( selector, context ) { //jQuery对象是实际上初始化名为enhanced(提高的)构造器 //jQuery对象实际上只是增强的初始化构造方法 return new jQuery.fn.init( selector, context, rootjQuery ); }, /* 用来匹配数字的正则,匹配可选正负号、浮点型、整型、科学计数法 * 没有使用(?)来表示可选而是通过(|)来选择 * (?:\d*\.|)匹配浮点数时,|前的\d*\.可以匹配整数部分和小数点,小数部分由后面的\d+匹配 * 匹配整数时,|)可以保证匹配继续向下进行,整数由后面的\d+匹配,同样的\d+在匹配整型和浮点型时负责的匹配部分不同 * [eE][\-+]?\d+|)处理科学计数法的匹配,同样没有使用?表示可选 */ core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, //用于分开空格 core_rnotwhite = /\S+/g, //查找非空白字符串 // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, //\uFEFF:字节顺序标志 //一个简单途径用于检查HTML字符串 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, //匹配一个独立的标签 rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, // JSON RegExp(JavaScript Object Notation:JavaScript对象标记法正则表达式) rvalidchars = /^[\],:{}\s]*$/, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, //以上为正则运算表达式各种形式,不太容易理解,尽量掌握
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值