看了jquery的源码,jquery用的选择器的引擎是sizzle,是jquery的作者另一开源项目,在github上面有,号称最快的dom选择器!不到2000行代码。
上面说了不是很精彩的开场白,我么来个 for example: $('.test') 在jquery的流程是怎么走的呢?
1.首先会做如下的判断
/** *关于 querySelectorAll函数 *返回当前文档中匹配一个特定选择器的所有的元素 *var nodelist = element.querySelectorAll("div.test"); *支持浏览器 ie8+,Chrome,Firefox(3.5) * 如果你不清楚可以google 一下 */ if ( document.querySelectorAll ) { (function(){ var oldSizzle = Sizzle, div = document.createElement("div"), id = "__sizzle__"; div.innerHTML = "<p class='TEST'></p>"; // Safari can't handle uppercase or unicode characters when // in quirks mode. if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } Sizzle = function( query, context, extra, seed ) { //使用querySelectorAll 来查询 } }
如果你的浏览器是ie8+ 或者 谷歌,直接通过内置的querySelectorAll(".test")返回dom结构。 如果你使用是ie6,那么下面事情发生了
2. 不支持querySelectorAll 就会启动内部 sizzle。下面是流程
/** 1.sizzle 通过 chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g 这个正则进行匹配, 2.把我们传来的参数'.test',匹配成'.test' 放到数组 3.检测浏览器是否支持getElementsByClassName 如果支持,则通过此函数返回dom,如果不支持此函数则 context.getElementsByTagName( "*" ) ,通过上下文把所有的元素选出来,在通过循环,选择className = 'test' 的元素,放入数组返回dom。 */
ok,以上是$('.test')的流程,如果你很迷惑,你可以看看源码,调试一下。
关于sizzle的选择器
个人认为,sizzle选择器是增强版的querySelectorAll 函数, 因为querySelectorAll 不支持 'div.test :eq(1)' 这样的selector 和css3选择!
当你的selector里面不出现nth|eq|gt|lt|first|last|even|odd 这样的字符时候, 从右向左,所谓的从右向左,比如 $('div img') 首先会把所有的img 选出来,通过parent 是div 进行过滤 。 这样很高效的原因是只进行一次dom的查询!
当你selector 出现了nth|eq|gt|lt|first|last|even|odd 这样的字符的时候,从左向右! 所谓从左向右,比如 $('div img:eq(1)') 先把所有的div 选出来保存,在把img选出来通过eq(1)过滤保存, 在对结果集操作,进行多次选择了
相关推荐
于是看了jquery的源码,jquery用的选择器的引擎是sizzle,是jquery的作者另一开源项目,在github上面有,号称最快的dom选择器!不到2000行代码。上面说了不是很精彩的开场白,我么来个 for example: $(‘.test’) 在...
Sizzle是jQuery中的核心选择器引擎,专门负责解析和执行CSS选择器。Sizzle的设计目标是独立于DOM API,使其能够在各种浏览器环境下工作,即使这些浏览器对CSS选择器的支持不完全。 在jQuery中,Sizzle引擎主要实现...
jQuery使用了名为`Sizzle`的独立选择器引擎来处理CSS选择器。`Sizzle`能够高效地解析和执行CSS选择器,包括处理复杂的组合选择器和属性选择器。在jQuery的源码中,`Sizzle`被引入并集成,使得开发者可以利用其强大的...
此外,jQuery 的选择器引擎 Sizzle 更加强大,能处理更复杂的选择器表达式,并且在兼容性方面优于原生 CSS。 ### 四、性能优化 虽然属性选择器非常方便,但在大型项目中,过度使用可能会影响页面加载和渲染速度。...
jQuery支持多种选择器,包括基本选择器(如"#id"、".class"、"tag")、类别选择器(如"[attribute]"、"[attribute=value]")、组合选择器(如","、"+"、">")以及伪类和伪元素选择器(如":hover"、":first")。...
### jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析 Sizzle选择器是jQuery库中用于解析和匹配DOM元素的一个核心组件。选择器的匹配逻辑在性能优化中起着至关重要的作用,尤其是在处理复杂的CSS选择器时。...
jQuery是一个广泛使用的JavaScript库,它的核心特性之一是其强大的选择器引擎——Sizzle。Sizzle引擎使得开发者能够使用类似于CSS的语法来选取DOM元素,极大地提高了网页开发的效率。在这个"jQuery中的Sizzle引擎...
Sizzle是jQuery所使用的底层选择器引擎,它是用来解析和执行这些选择器的核心库。 addCombinator函数是Sizzle选择器引擎中一个关键的组件,它的作用是根据提供的选择器和关系来创建一个新的函数,这个函数能够...
Selenium WebDriver的扩展包括jQuery / Sizzle选择器支持。 产品特点 主要 支持嵌套选择器 易于设置:安装NuGet软件包并开始与您现有的Selenium解决方案一起使用 通过与Appveyor的持续集成设置,单元和集成测试以及...
用于收集和显示 Sizzle 选择器的控制台性能统计信息的 jQuery 插件。 Sizzle 通过$.find()集成到 jQuery 中,并用于所有接受选择器字符串的方法中,例如.filter(selector) 、 .closest(selector)等。 SizzleStats ...
4. **选择器支持**:Zepto使用Sizzle选择器引擎,与jQuery相同,但某些高级CSS选择器在Zepto中可能不被支持。 5. **浏览器兼容性**:jQuery致力于广泛的浏览器兼容性,包括较老版本的IE,而Zepto主要面向现代浏览器...
1. 选择器:jQuery的核心之一是它的CSS选择器,如$("#id")、$(".class")等,这些选择器基于Sizzle引擎实现,能够高效地定位DOM元素。 2. 链式调用:jQuery对象返回的是一个包含多个DOM元素的集合,可以连续调用方法...
Sizzle是一个独立的、开源的JavaScript选择器引擎,主要用于处理CSS选择器,是jQuery早期版本的核心部分。它为JavaScript开发者提供了一种高效的方式来查找和操作DOM(文档对象模型)中的元素,极大地简化了网页脚本...
jQuery 1.4.2 版本在性能上进行了优化,比如引入了Sizzle选择器引擎,提高了选择器的执行速度。此外,还引入了一些技巧,如deferred对象和live/delegate事件代理,以减少DOM遍历和内存占用。 总结,jQuery 1.4.2...