B\S备忘录24——Jquery原理简单作死向分析
来源:互联网 发布:绘画 知乎 编辑:程序博客网 时间:2024/05/16 15:20
最近是在学习JQuery,要是我早点学习了就不会一个一个的写document.getElementByID了,在学习JS的视频的时候就有一个例子,是封装了一个JS,也是实现了一个$符就能直接获取到元素,所以也是很好奇,查了一下JQuery实现的原理。
进入JQuery的源码中发现了一句话
var jQuery = window.jQuery = window.$ = function (selector, context) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init(selector, context); };每次申明一个jQuery对象的时候,返回的是jQuery.prototype.init对象,很多人就会不明白,init明明是jQuery.fn的方法啊,实际上这里不是方法,而是init的构造函数,因为js的prototype对象可以实现继承,加上js的对象只是引用不会是拷贝,new jQuery,new jQuery.fn和new jQuery.fn.init的子对象是一样的,只是有没有执行到init的不同。当我们使用选择器的时候$(selector,content),就会执行init(selectot,content)。
jQuery.fn = jQuery.prototype = { init: function (selector, context) { // 确认选择器已经提供 selector = selector || document; // 处理DOM元素 if (selector.nodeType) { this[0] = selector; this.length = 1; return this; } // 处理HTML字符串 if (typeof selector == "string") { // 判断处理的是HTML字符串还是ID var match = quickExpr.exec(selector); // 做匹配,如果是ID if (match && (match[1] || !context)) { // HANDLE: $(html) -> $(array) if (match[1]) selector = jQuery.clean([match[1]], context); // HANDLE: $("#id") else { var elem = document.getElementById(match[3]); // 确认元素已经加载 if (elem) { // Handle the case where IE and Opera return items // 如果是根据Name选择 if (elem.id != match[3]) return jQuery().find(selector); // 否则直接将元素注入到JQuery对象中 return jQuery(elem); } selector = []; } // <span style="color: rgb(0, 130, 0); font-family: 'Courier New', Courier, monospace; line-height: 13.1999998092651px;">非id的形式.在context中或者是全文查找</span> // (which is just equivalent to: $(content).find(expr) } else return jQuery(context).find(selector); // HANDLE: $(function) // Shortcut for document ready } else if (jQuery.isFunction(selector)) return jQuery(document)[jQuery.fn.ready ? "ready" : "load"](selector); return this.setArray(jQuery.makeArray(selector)); }这里是init这个方法的具体代码,反正我是没怎么看懂,查了查资料发现,大概就是根据$()中输入的ID进行分类型的查询,查询完成之后返回一个JQuery对象,然后我们就可以开心的连缀了~
0 0
- B\S备忘录24——Jquery原理简单作死向分析
- B\S备忘录02——分页
- B\S备忘录05——团控
- B\S备忘录07——Request
- B\S备忘录08——工作流
- B\S备忘录20——委托
- B\S备忘录01——此吧神兽“焰正马 ”
- B\S备忘录番外篇——你们要的总结
- B\S备忘录11——新技能AOP get√
- B\S备忘录14——IIS添加MIME类型
- B\S备忘录16——tomcat压缩版安装
- B\S备忘录17——cas服务端配置
- B\S备忘录18——cas连接数据库
- B\S备忘录19——就说多查查有好处
- B\S备忘录23——Excalibur!!不对,是Expression!!
- B\S备忘录25——集群初识
- jquery原理的简单分析
- B\S备忘录03——不会做?多做做就会了
- 学习习惯之时间管理工具
- 黑马程序员--C语言——基础语法
- 扩展欧几里德 POJ1061
- 嵌入式linux之USB设备驱动概念
- poj 3364 水题
- B\S备忘录24——Jquery原理简单作死向分析
- UIScrollView的属性总结
- hdu 5319 2015多校对抗赛三
- 秒杀多线程第五篇 经典线程同步 关键段CS
- HDU 4336 Card Collector(概率DP)
- 查看ubuntu是32位还是64位
- 浅析notifyDataSetChanged内部工作流程
- Android学习笔记之事件分发机制(二)
- 2187 悼念512汶川大地震遇难同胞——老人是真饿了