`
goodscript
  • 浏览: 73033 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Sizzle 源码分析

 
阅读更多
解析Sizzle 的源码首先从Sizzle 的入口开始
/**
	 * 
	 * 这个方法是Sizzle 的入口
	 */
	var Sizzle = function(selector, context, results, seed) {
		/**
		 * results是保存结果的数组 context默认为document 各种局部变量的定义
		 */
		results = results || [];
		context = context || document;
		var match, elem, contextXML, m, nodeType = context.nodeType;
		// nodeType ==9说明context是document nodeType ==1表示context是element
		if (nodeType !== 1 && nodeType !== 9) {
			return [];
		}
		// 如果选择器不是字符串或者为空 返回一个空的数组
		if (!selector || typeof selector !== "string") {
			return results;
		}
		// 是否是xml格式
		contextXML = isXML(context);
		// seed是预留的参数 一般情况下不会有值
		if (!contextXML && !seed) {
			/**
			 * rquickExpr正则表达式匹配#号.号开头后接多个单词字符包括上划线- 或者多个单词字符 一旦匹配成功------------
			 * match[1]对应 #ID -----------match[2]对应 TAG -------match[3]对应 .class
			 * 
			 */
			if ((match = rquickExpr.exec(selector))) {
				/**
				 * 处理Sizzle("#ID")
				 */
				// Speed-up: Sizzle("#ID")
				if ((m = match[1])) {
					// 如果上下文是document 可以直接使用document.getElementById方法获取元素
					if (nodeType === 9) {
						elem = context.getElementById(m);
						// Check parentNode to catch when Blackberry 4.6 returns
						// nodes that are no longer in the document #6963
						if (elem && elem.parentNode) {
							// Handle the case where IE, Opera, and Webkit
							// return items
							// by name instead of ID
							if (elem.id === m) {
								/**
								 * makeArray的作用就是合并两个对象或者数组 并返回合并后的数组或对象
								 * 把结果保存到results
								 */
								return makeArray([elem], results);
							}
						} else {
							return makeArray([], results);
						}
					} else {
						/**
						 * 如果Context不是document 先通过ownerDocument属性取得document
						 * 然后在再通过document.getElementById来获取element
						 */
						// Context is not a document
						if (context.ownerDocument
								&& (elem = context.ownerDocument
										.getElementById(m))
								&& contains(context, elem) && elem.id === m) {
							return makeArray([elem], results);
						}
					}
					/**
					 * 处理 Sizzle("TAG")
					 * 通过element元素的getElementsByTagName方法获取选择器表达式
					 */
					// Speed-up: Sizzle("TAG")
				} else if (match[2]) {
					return makeArray(context.getElementsByTagName(selector),
							results);
					/**
					 * 处理 Sizzle(".CLASS")
					 * assertUsableClassName测试各个浏览器element是否支持getElementsByClassName方法
					 * 
					 */
					// Speed-up: Sizzle(".CLASS")
				} else if (assertUsableClassName && (m = match[3])
						&& context.getElementsByClassName) {
					return makeArray(context.getElementsByClassName(m), results);
				}
			}
		}

		// All others
		return select(selector, context, results, seed, contextXML);
	};

分享到:
评论
1 楼 leaow567 2012-09-08  
我最近也在看

相关推荐

    jQuery中的Sizzle引擎分析

    通过查看源码,开发者可以学习到更多关于Sizzle实现的细节,比如如何处理复杂的CSS选择器组合,以及如何与jQuery其他组件协同工作。 总的来说,Sizzle引擎是jQuery的核心组成部分,它的强大功能和跨浏览器兼容性...

    jQuery中的Sizzle引擎分析demo

    在这个"jQuery中的Sizzle引擎分析demo"中,我们将深入探讨Sizzle的工作原理以及如何通过实例来理解它。 Sizzle引擎的设计目标是提供一个高性能的选择器解析和执行环境,它独立于jQuery之外,可以单独使用。Sizzle...

    Jquery源码分析 源码

    《jQuery源码分析》 jQuery,作为一款广泛使用的JavaScript库,极大地简化了DOM操作、事件处理、动画制作以及Ajax交互。深入理解其源码对于提升JavaScript编程技能和优化前端性能至关重要。本文将从核心概念、设计...

    jQuery源码分析系列.pdf

    综上所述,这份关于jQuery源码分析的系列文档,系统地梳理了jQuery库的各个组成部分,并且详细探讨了内部实现机制,为开发者提供了宝贵的学习资源,使得开发者能更深入地理解和使用jQuery,提高前端开发的效率和质量...

    Sizzle的

    Sizzle的源码是一个很好的学习资源,可以深入了解CSS选择器的实现细节,以及如何在JavaScript中高效地处理DOM。通过阅读和分析Sizzle的代码,开发者可以学习到如何编写高效、跨浏览器的JavaScript代码,这对于任何...

    jquery api, jquery ui api, jquery源码分析

    **jQuery API** jQuery 是一款广泛使用的 JavaScript 库,它的出现极大地简化了网页的 ...通过学习jQuery API、jQuery UI API以及源码分析,开发者不仅可以提升开发效率,还能编写出更高效、更优雅的JavaScript代码。

    jQuery源码分析-04 选择器-Sizzle-工作原理分析

    在分析Sizzle源码之前,先整理一下选择器的工作原理 先明确一些选择器中用到的名词,后边阅读时不会有歧义: 选择器表达式: “div > p” 块表达式: “div” “p” 并列选择器表达式: “div, p” 块分割器: ...

    Jquery详解-源码分析

    提供的压缩包文件名列表与Jquery源码分析的主题不相符,它们看起来是音频文件的名称,可能是相声或者音乐作品。然而,你要求的是关于Jquery的源码分析。因此,我将专注于Jquery这个JavaScript库的相关知识点。 **...

    Jquery1.2.6源码分析教程

    **jQuery 1.2.6 源码分析教程** jQuery 是一个广泛使用的 JavaScript 库,因其简洁的语法和强大的功能而备受开发者喜爱。在 jQuery 1.2.6 版本中,虽然它已经相对老旧,但其背后的实现原理和优化策略仍然值得深入...

    Jquery1.2.6源码分析

    《jQuery 1.2.6 源码分析》 jQuery是JavaScript库的里程碑之作,它的出现极大地简化了网页的DOM操作,事件处理,动画设计和Ajax交互。本篇文章将聚焦于jQuery 1.2.6版本的源码,深入剖析其内部机制,帮助开发者更好...

    JQuery源码详细中文注释_Jquery源码分析_

    总结,jQuery源码分析涉及的内容广泛,包括选择器引擎、事件处理、DOM操作、动画效果、Ajax通信以及插件开发等多个方面。深入理解jQuery源码,有助于我们更好地利用它来构建高效、易维护的Web应用。通过阅读中文注释...

    jquery1.2.6源码分析

    《jQuery 1.2.6 源码分析——揭示JavaScript库的秘密》 jQuery,作为JavaScript最著名的库之一,自2006年发布以来,以其简洁易用的API和强大的功能深受开发者喜爱。本文将深入探讨jQuery 1.2.6版本的源码,帮助我们...

    jq的源码分析

    《jq的源码分析》 JavaScript库jQuery(简称jq)是Web开发中广泛使用的工具,它的强大功能和易用性使得开发者能够轻松处理DOM操作、事件处理、Ajax交互以及动画效果。深入理解jq的源码有助于提升我们对JavaScript...

    Jqurey 源码分析

    【jQuery 源码分析】 jQuery 是一个广泛使用的 JavaScript 库,它的源码设计和实现包含了许多巧妙的技巧和最佳实践。源码分析对于理解其内部工作原理和提高JavaScript编程能力至关重要。 首先,jQuery 源码以一个...

    Jquery1.2.6源码分析+源代码

    **jQuery 1.2.6 源码分析** jQuery 是一个广泛使用的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画以及 Ajax 交互等任务。本篇文章将深入探讨 jQuery 1.2.6 版本的源码,揭示其背后的实现原理,帮助...

    Jquery源码分析

    《jQuery源码分析》 jQuery,作为一款广泛使用的JavaScript库,极大地简化了DOM操作、事件处理、动画制作以及Ajax交互。对于深入理解JavaScript和前端开发技术的开发者来说,探究jQuery的源码是提升技能的重要途径...

Global site tag (gtag.js) - Google Analytics