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

jquery Sizzle系列之filters

阅读更多

本代码来自1.7.1版本。

 

jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;

 

 

//4227行
Sizzle.selectors = {

      //4483---返回的都是Boolean
      filters:{
            /*
             * @name enabled 
             * @info 加了一个限制:不能为隐藏域
            */
            enabled:function(elem){
                   return elem.disabled  === false && elem.type !== "hidden";
            },

            /*
             * @name disabled 
             * @info 匹配是否disabled
            */
            disabled:function(elem){
                   return elem.disabled === true;
            },

            /*
             * @name checked
             * @info 匹配是否选中
            */
            checked:function(){
                   return elem.checked === true;
            },

             /*
             * @name selected
             * @info 
            */
            selected:function(){
                  if(elem.parentNode){
                       elem.parentNode.selectedIndex;
                  }

                  return elem.selected === true;
            },

             /*
             * @name parent
             * @info 匹配是否含有子节点的,直接看有没有firstChild
            */
            parent:function(elem){
                  return !!elem.firstChild;
            },

            /*
             * @name empty
             * @info 匹配不含子节点的,直接看有没有firstChild
            */
            empty:function(elem){
                  return !elem.firstChild;
            },

            /*
             * @name has
             * @info 
            */
            has:function(elem,i,match){
                  return !!Sizzle(match[3],elem).length;
            },

             /*
             * @name header
             * @info 匹配是否是h1,h2,h3,h4,h5,h6
            */
            header:function(elem){
                  return (/h\d/i).test(elem.nodeName);
            },

            /*
             * @name text
             * @info 
            */
            text:function(elem){
                  var attr = elem.getAttribute("type"),
                        type = elem.type;

                  return elem.nodeName.toLowerCase() === "input" && 
                            "text" === type && (attr === type || attr === null);
            },

            /*
             * @name radio
             * @info 匹配是否是radio
            */
            radio:function(elem){
                  return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
            },

            /*
             * @name checkbox
             * @info 匹配是否是checkbox
            */
            checkbox:function(elem){
                  return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
            },

            /*
             * @name file
             * @info 匹配是否是文件输入域
            */
            file:function(elem){
                  return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
            },

           /*
             * @name password
             * @info 匹配是否是密码输入域
            */
           password:function(elem){
                  return elem.nodeName.toLowerCase() === "input" && elem.type === "password"
           },

           /*
             * @name submit
             * @info 
            */
           submit:function(elem){
                  var name = elem.nodeName.toLowerCase();
                  return (name === "input" || name === "button") && "submit" === elem.type;
           },

            /*
             * @name image
             * @info 匹配是否是图像
            */
            image:function(elem){
                  return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
            },

             
            /*
             * @name reset
             * @info 匹配是否reset
            */
            reset:function(elem){
                  var name = elem.nodeName.toLowerCase();
                  return (name === "input" || name === "button") && "reset" === elem.type;
            },

            /*
             * @name button
             * @info 
            */
            button:function(elem){
                  var name = elem.nodeName.toLowerCase();
                  return name === "input" && "button" === elem.type &&
                             name === "button";
            },

             /*
             * @name input
             * @info 
            */
            input:function(elem){
                  return (/input|select|textarea|button/i).test(elem.nodeName);
            },

            /*
             * @name focus
             * @info 
            */
            focus:function(elem){
                  return elem === elem.ownerDocument.activeElement;
            }

      }
}
 

 

 

分享到:
评论

相关推荐

    jQuery中的Sizzle引擎分析

    2. **高效的选择器解析**:Sizzle将CSS选择器转换为一系列可执行的规则,然后逐个应用于DOM树。它使用正则表达式解析选择器,生成一个内部表示,称为“tokens”,然后使用这些tokens遍历DOM。 3. **匹配算法**:...

    jquery 选择器引擎sizzle浅析

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

    jQuery中的Sizzle引擎分析demo

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

    JQuery1.4.1与JQuery1.8.3

    2. **新的选择器引擎Sizzle**:这个版本引入了 Sizzle,一个独立的选择器引擎,增强了 jQuery 的 CSS 选择器支持,使得开发者可以更加方便地定位和操作DOM元素。 3. **链式操作增强**:jQuery 1.4.1 进一步完善了...

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

    1. **选择器(Selectors)**:jQuery 的核心功能之一就是强大的CSS选择器,如 `$("#id")` 选择ID为特定值的元素,`$(".class")` 选择具有特定类的元素,`$("tagname")` 选择所有特定类型的标签。 2. **DOM 操作...

    jquery1.4.2 jquery1.4.2

    1. 选择器:jQuery的核心之一是其强大的CSS选择器支持,包括ID选择器 (#id)、类选择器 (.class)、元素选择器 (element) 等,甚至支持组合选择器和伪类,如 $(“div.special”).find(“p:first”),可以高效地定位到...

    Sizzle的

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

    jquery-1.11.3.js 、jquery-1.11.3.min.js 【官方jquery包 js】

    jQuery 1.11.3在性能上做了优化,例如使用Sizzle选择器引擎提升选择元素的速度,以及缓存查找结果以减少重复查询,这些改进使代码在大型项目中依然保持高效运行。 总的来说,jQuery 1.11.3是前端开发的重要工具,...

    jQuery源码分析系列.pdf

    jQuery的事件处理机制是其最核心的功能之一,涵盖了事件绑定与删除、事件触发机制等细节。对于事件的捕获和冒泡处理,以及如何通过bind/unbind、live/die、delegate/undelegate等函数来实现事件的高级管理,是每个...

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

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

    jquery-1.8.3.js 、jquery-1.8.3.min.js 【官方jquery包 js】

    jQuery 1.8.3版本在功能上继承了jQuery一贯的优雅特性,包括选择器引擎(Sizzle)、链式调用、DOM操作、事件处理、动画效果和Ajax请求。其中,选择器引擎使得开发者可以通过CSS1-CSS3的选择器轻松选取DOM元素,而...

    jquery1.51

    1. **选择器引擎优化**:jQuery 1.5.1对选择器引擎Sizzle进行了优化,提高了元素查找的速度和准确性,使得在大型DOM树中操作更加高效。 2. **AJAX增强**:这一版本加强了AJAX功能,如增加了对JSONP的支持,提升了...

    JQuery-1.4 and JQuery-1.4.mini

    2. **新的选择器引擎Sizzle**:jQuery 1.4引入了Sizzle选择器引擎,提高了CSS选择器的支持度,使得开发者可以更方便地选取元素。 3. **$.ajax()的增强**:在jQuery 1.4中,$.ajax()方法更加灵活,支持JSONP、跨域...

    jquery各个版本

    - jQuery 1.0(2006年):标志着jQuery的诞生,引入了链式调用、选择器引擎Sizzle等创新特性,简化了JavaScript编程。 - jQuery 1.3(2009年):增强了性能,特别是DOM操作速度的提升,同时增加了live()方法,支持...

    前端项目-sizzle.zip

    3. **独立于库**:与其他前端库如jQuery不同,Sizzle是一个独立的选择器引擎,可以被任何JavaScript项目集成,不需要依赖其他大型框架。 4. **API设计**:Sizzle提供了一套简洁的API,使得开发者可以方便地使用CSS...

    jQuery-, jQuery源码解读 -- jQuery v1.10.2.zip

    jQuery的选择器引擎Sizzle是其强大功能的关键之一。Sizzle支持CSS1-CSS3的选择器,并能有效地匹配和选取DOM元素。通过阅读源码,我们可以学习到如何编写高效的选择器,以及如何利用Sizzle实现复杂的DOM遍历。 3. *...

    韩顺平 jquery 源码 传智播客

    jQuery通过Sizzle选择器引擎实现了这些功能,它利用正则表达式解析CSS选择器,并通过文档遍历找到匹配的元素。了解Sizzle的工作机制,有助于我们编写更高效的选择器表达式。 其次,jQuery对象(jQuery Object)是...

    jquery 1.26和1.3的

    接下来是jQuery 1.3,这是一个重要的里程碑,因为它引入了jQuery的Sizzle选择器引擎。1.3版的主要更新包括: 1. **Sizzle选择器**:这个版本中,jQuery开始使用Sizzle,一个独立的选择器引擎,提高了选择器性能,...

Global site tag (gtag.js) - Google Analytics