献给和我合作的过得前端童靴们:jquery源码分析--核心函数(创建选择器筛选document元素)
来源:互联网 发布:mac系统复制粘贴快捷键 编辑:程序博客网 时间:2024/05/17 03:34
接上篇。
直接上代码了:
init = jQuery.fn.init = function( selector, context, root ) { var match, elem; root = root || rootjQuery; if ( typeof selector === "string" ) { rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/; match = rquickExpr.exec( selector ); /*$('#id')*/ if ( /* 如果正则匹配出“id” */ ) { elem = document.getElementById( match[ 2 ] ); if ( elem && elem.parentNode ) { /* IE和Opera 返回的是name 不是id */ if ( elem.id !== match[ 2 ] ) { return rootjQuery.find( selector ); } this.length = 1; this[ 0 ] = elem; } this.context = document; this.selector = selector; return this; } else if ( !context || context.jquery ) { /* $(expr, $(...)) */ return ( context || root ).find( selector ); } else { /* $(expr, context) */ return this.constructor( context ).find( selector ); } }};
如果匹配是“#id”这样的直接使用document.getElementById找出需要的document元素,并包装(包装过程“this.length = 1;this[ 0 ] = elem;this.context = document;this.selector = selector;”), 最后返回自己。
如果不是,先得到jquery对象,然后调用jquery对象的find方法。
jQuery.fn.extend( { find: function( selector ) { var i, ret = [], self = this, len = self.length; /** * http://sizzlejs.com/ * 选择器引擎,等选择器的时候分析该引擎。 **/ jQuery.find = Sizzle; for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } /* jQuery.unique 过滤重复元素 */ jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, /** * 创建一个新的jQuery对象,并返回。 **/ pushStack: function( elems ) { var ret = jQuery.merge( this.constructor(), elems ); ret.prevObject = this; ret.context = this.context; return ret; },} );
jQuery对象的find方法,调用了jQuery.find方法(即“jQuery.find = Sizzle;jQuery.find( selector, self[ i ], ret );”),得到查询的结果集,并对该结果集去重。
创建一个新的jQuery对象“this.constructor()”,然后包装结果集到新对象中,最后返回该对象。
0 0
- 献给和我合作的过得前端童靴们:jquery源码分析--核心函数(创建选择器筛选document元素)
- 献给和我合作的过得前端童靴们:jquery源码分析--核心函数(动态创建document元素)
- 献给和我合作的过得前端童靴们:jquery源码分析--核心函数(创建jquery空对象)
- 献给和我合作的过得前端童靴们:jquery源码分析--核心函数(包装对象和holdReady方法)
- 献给和我合作的过得前端童靴们:jquery源码分析--核心函数(使用函数作为参数创建jQuery对象)
- 献给和我合作的过得前端童靴们:jquery源码分析--序
- 献给和我合作的过得前端童靴们:jquery源码分析--序2
- 献给和我合作的过得前端童靴们:jquery源码分析--序3
- 献给和我合作的过得前端童靴们:jquery源码分析--序4
- 献给和我同样学习前端脚本时,先学jQuery,而之前没有接触过JS的同学
- jQuery选择器源码分析和easyui核心分析
- jQuery选择器之子元素筛选选择器
- jQuery源码分析(版本1.6.1)___构造jQuery对象-源码结构和核心函数
- jQuery源码分析-构造jQuery对象-源码结构和核心函数
- jQuery源码分析-03构造jQuery对象-源码结构和核心函数
- jQuery源码分析-03构造jQuery对象-源码结构和核心函数
- jQuery源码分析-03构造jQuery对象-源码结构和核心函数
- 【转】jquery之Document元素选择器篇
- 第八周项目1.2 多文件处理程序
- [2016,CVPR] Top-push Video-based Person Re-identification
- iOS入门时常用的一些代码段——2
- 百灯判亮
- K-Means算法的C语言实现
- 献给和我合作的过得前端童靴们:jquery源码分析--核心函数(创建选择器筛选document元素)
- win8下安装wamp的各种问题
- Java:普通代码块、构造代码块、静态代码块
- 第八周项目1-数组做数据成员(2)
- CodeForces 664A Complicated GCD
- C++编程基础笔记章节七
- 不用加减乘除实现加法
- iOS开发之即时通讯之Socket(AsyncSocket)
- [LeetCode]137. Single Number II