`
zhangyaochun
  • 浏览: 2563049 次
  • 性别: 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引擎分析

    在 http://www.cnblogs.com/strick/p/5078435.html 有描述

    jquery 选择器引擎sizzle浅析

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

    jQuery源码分析之sizzle选择器详解

    jquery从1.3开始,使用了新的选择器–sizzle。效率超过了以前的jquery版本的其他选择器。下面这篇文章主要介绍了jQuery源中sizzle选择器的相关资料,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。

    最新jquery.1.8.1

    在jQuery 1.8.1中,您可以移除一些不需要的模块,以构建一个专属的jQuery版本。通过基于grunt的新构建系统,你可以轻松实现该功能。可以移除的模块包括ajax、css、dimensions、effects和offset。更多信息可参阅...

    jQuery技术内幕 深入解析jQuery架构设计与实现原理

    《jquery技术内幕:深入解析jquery架构设计与实现原理》由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jquery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jquery中的实现技巧和...

    jQuery技术内幕:深入解析jQuery架构设计与实现原理

    资源名称:jQuery技术内幕:深入解析jQuery架构设计与...接着详细分析了底层支持模块的源码实现,包括:选择器 Sizzle、异步队列 Deferred、数据缓存 Data、资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    jQuery中的Sizzle引擎分析demo

    在 http://www.cnblogs.com/strick/p/5078435.html 描述

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

    该项目不再维护! 描述 Selenium WebDriver的扩展包括jQuery / Sizzle选择器支持。... jQuery / Sizzle在不使用jQuery的网站上的页面上自动加载 支持上下文切换 支持ExpectedConditions 支持页面对象 安装

    jquery-1.4.2.js

    * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Sat Feb 13 22:33:48 2010 -0500 */ (function(window, ...

    jquery-3.5.1.js

    * Includes Sizzle.js * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * * Date: 2020-05-04T22:49Z */

    jquery插件使用方法大全

    jQuery就是如此强大,你可以轻易地找到DOM中的任何元素,而这也是jQuery设计之初query的真实含义(查询)。 编辑本段Jquery对象  jquery提供了很多便利的函数,如each(fn),但是使用这些函数的前提是:你使用的对象...

    sizzle-pseudos:jQuery和Sizzle的很酷的自定义伪选择器的集合

    jQuery / Sizzle自定义伪选择器 只是我的伪装收藏。 表现 请注意将通过这些选择器传递多少个元素,因为它们将无法利用本机DOM querySelectorAll()方法提供的性能提升。 为了在使用这些伪指令中的任何一个时获得最佳...

    最新JQuery版本1.8

    在jQuery 1.8中,您可以移除一些不需要的模块,以构建一个专属的jQuery版本。通过基于grunt的新构建系统,你可以轻松实现该功能。可以移除的模块包括ajax、css、dimensions、effects和offset。更多信息可参阅README ...

    jQuery 1.8 正式版

    1. Sizzle 选择器引擎重新架构 2. 重新改造动画处理 3. 自动 CSS 前缀处理 当你在 .css() 和 .animate() 中使用 CSS 属性时,jQuery 会自动根据浏览器类型来设置一些前缀,例如 .css("user-select", "none") 在 ...

    JQUERY技术内幕:深入解析QUERY架构设计与实现原理 完整版 共两个包

    接着详细分析了底层支持模块的源码实现,包括:选择器sizzle、异步队列deferred、数据缓存data、队列queue、浏览器功能测试support;最后详细分析了功能模块的源码实现,包括:属性操作attributes、事件系统events、...

    jquery v1.9.1 免费版

    1. Sizzle 选择器引擎重新架构 2. 重新改造动画处理 3. 自动 CSS 前缀处理 当你在 .css() 和 .animate() 中使用 CSS 属性时,jQuery 会自动根据浏览器类型来设置一些前缀,例如 .css("user-select", "none") 在 ...

    jQuery原理系列-css选择器的简单实现

    jQuery最强大的功能在于它可以通过css选择器查找元素,它的源码中有一半是sizzle css选择器引擎的代码,在html5规范出来之后,增加了document.querySelector和document.querySelectorAll直接查找元素,如果是做...

    jquery-1.4.2.min.js

    * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * Downloads By http://down.liehuo.net/ * Date: Sat Feb 13 22:33...

Global site tag (gtag.js) - Google Analytics