`
axl234
  • 浏览: 268939 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery sizzle 选择器浅析

 
阅读更多

看了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)过滤保存, 在对结果集操作,进行多次选择了

分享到:
评论
1 楼 haixin3036 2014-07-16  
jQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作。http://www.adminwang.com/jquery/对Css3和各种主流浏览器做了兼容性处理.jquery使开发者把更多的精力用到程序的功能实现上,而不是对兼容性等问题的处理.

相关推荐

    jquery 选择器引擎sizzle浅析

    于是看了jquery的源码,jquery用的选择器的引擎是sizzle,是jquery的作者另一开源项目,在github上面有,号称最快的dom选择器!不到2000行代码。上面说了不是很精彩的开场白,我么来个 for example: $(‘.test’) 在...

    jQuery中的Sizzle引擎分析

    Sizzle是jQuery中的核心选择器引擎,专门负责解析和执行CSS选择器。Sizzle的设计目标是独立于DOM API,使其能够在各种浏览器环境下工作,即使这些浏览器对CSS选择器的支持不完全。 在jQuery中,Sizzle引擎主要实现...

    jQuery表单选择器源码

    jQuery使用了名为`Sizzle`的独立选择器引擎来处理CSS选择器。`Sizzle`能够高效地解析和执行CSS选择器,包括处理复杂的组合选择器和属性选择器。在jQuery的源码中,`Sizzle`被引入并集成,使得开发者可以利用其强大的...

    jquery 属性选择器的使用

    此外,jQuery 的选择器引擎 Sizzle 更加强大,能处理更复杂的选择器表达式,并且在兼容性方面优于原生 CSS。 ### 四、性能优化 虽然属性选择器非常方便,但在大型项目中,过度使用可能会影响页面加载和渲染速度。...

    jQuery常规选择器源码

    jQuery支持多种选择器,包括基本选择器(如"#id"、".class"、"tag")、类别选择器(如"[attribute]"、"[attribute=value]")、组合选择器(如","、"+"、"&gt;")以及伪类和伪元素选择器(如":hover"、":first")。...

    jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析

    ### jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析 Sizzle选择器是jQuery库中用于解析和匹配DOM元素的一个核心组件。选择器的匹配逻辑在性能优化中起着至关重要的作用,尤其是在处理复杂的CSS选择器时。...

    jQuery中的Sizzle引擎分析demo

    jQuery是一个广泛使用的JavaScript库,它的核心特性之一是其强大的选择器引擎——Sizzle。Sizzle引擎使得开发者能够使用类似于CSS的语法来选取DOM元素,极大地提高了网页开发的效率。在这个"jQuery中的Sizzle引擎...

    jQuery选择器源码解读(八):addCombinator函数

    Sizzle是jQuery所使用的底层选择器引擎,它是用来解析和执行这些选择器的核心库。 addCombinator函数是Sizzle选择器引擎中一个关键的组件,它的作用是根据提供的选择器和关系来创建一个新的函数,这个函数能够...

    Selenium.WebDriver.Extensions:Selenium WebDriver的扩展,包括jQuerySizzle选择器支持

    Selenium WebDriver的扩展包括jQuery / Sizzle选择器支持。 产品特点 主要 支持嵌套选择器 易于设置:安装NuGet软件包并开始与您现有的Selenium解决方案一起使用 通过与Appveyor的持续集成设置,单元和集成测试以及...

    SizzleStats:用于收集 Sizzle 选择器性能统计信息的 jQuery 插件

    用于收集和显示 Sizzle 选择器的控制台性能统计信息的 jQuery 插件。 Sizzle 通过$.find()集成到 jQuery 中,并用于所有接受选择器字符串的方法中,例如.filter(selector) 、 .closest(selector)等。 SizzleStats ...

    最全前端面试题-5(jquery篇-上百篇题集整理1个月)

    4. **选择器支持**:Zepto使用Sizzle选择器引擎,与jQuery相同,但某些高级CSS选择器在Zepto中可能不被支持。 5. **浏览器兼容性**:jQuery致力于广泛的浏览器兼容性,包括较老版本的IE,而Zepto主要面向现代浏览器...

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

    1. 选择器:jQuery的核心之一是它的CSS选择器,如$("#id")、$(".class")等,这些选择器基于Sizzle引擎实现,能够高效地定位DOM元素。 2. 链式调用:jQuery对象返回的是一个包含多个DOM元素的集合,可以连续调用方法...

    Sizzle的

    Sizzle是一个独立的、开源的JavaScript选择器引擎,主要用于处理CSS选择器,是jQuery早期版本的核心部分。它为JavaScript开发者提供了一种高效的方式来查找和操作DOM(文档对象模型)中的元素,极大地简化了网页脚本...

    jquery1.4.2 jquery1.4.2

    jQuery 1.4.2 版本在性能上进行了优化,比如引入了Sizzle选择器引擎,提高了选择器的执行速度。此外,还引入了一些技巧,如deferred对象和live/delegate事件代理,以减少DOM遍历和内存占用。 总结,jQuery 1.4.2...

Global site tag (gtag.js) - Google Analytics