JQuery日记_5.20 JQuery对Sizzle选择器的扩展
来源:互联网 发布:淘宝日版手办 编辑:程序博客网 时间:2024/05/16 18:19
代码很简单直接上源码
function winnow( elements, qualifier, not ) {//如果qualifier是函数if ( jQuery.isFunction( qualifier ) ) {//not为true时,返回qualifier返回false的elements//not为false时,返回qualifier返回true的elementsreturn jQuery.grep( elements, function( elem, i ) {/* jshint -W018 */return !!qualifier.call( elem, i, elem ) !== not;});}//如果qualifier是DOM元素if ( qualifier.nodeType ) {//not为true时,返回elements中和qualifier不是同一元素的elements//not为false时,返回elements中和qualifier是同一元素的elementsreturn jQuery.grep( elements, function( elem ) {return ( elem === qualifier ) !== not;});}//如果qualifier是字符串(将qualifier当成selector)if ( typeof qualifier === "string" ) {// 如果selector不是多级selector(多级selector:div #id)或多selector(selector, selector)// 直接调用jQuery.filter( qualifier, elements, not )返回结果// risSimple = /^.[^:#\[\.,]*$/if ( risSimple.test( qualifier ) ) {return jQuery.filter( qualifier, elements, not );}// 如果selector是多级selector(多级selector:div #id)或多selector(selector, selector)// 解释: 因为多级selector或selector无法直接加上:not组成伪类选择器// 所以先过滤,再遍历根据not参数过滤qualifier = jQuery.filter( qualifier, elements );}return jQuery.grep( elements, function( elem ) {return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;});}/** * filter方法是对自身进行筛选 * find方法是对子集进行查找或匹配 */jQuery.filter = function( expr, elems, not ) {var elem = elems[ 0 ];//如果有not参数,修正selector为not伪类表达式if ( not ) {expr = ":not(" + expr + ")";}return elems.length === 1 && elem.nodeType === 1 ?//只有一个元素看是否和表达式匹配jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {return elem.nodeType === 1;}));};jQuery.fn.extend({find: function( selector ) {var i,len = this.length,ret = [],self = this;// example:// var e = document.getElementById('a');// var $li = $('div').find(e);if ( typeof selector !== "string" ) {return this.pushStack( jQuery( selector ).filter(function() {for ( i = 0; i < len; i++ ) {// this指向jQuery( selector )迭代的当前元素// 如果调用.find(selector)的JQuery对象中的的某个元素包含selector,返回trueif ( jQuery.contains( self[ i ], this ) ) {return true;}}}) );}//$('ul').find('li');for ( i = 0; i < len; i++ ) {jQuery.find( selector, self[ i ], ret );}// Needed because $( selector, context ) becomes $( context ).find( selector )// 删除重复元素ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );// 拼接调用者和selector,example,$(div).find('ul'),ret.selector为div ulret.selector = this.selector ? this.selector + " " + selector : selector;return ret;},// 保留匹配selector的元素filter: function( selector ) {return this.pushStack( winnow(this, selector || [], false) );},// 删除匹配selector的元素not: function( selector ) {return this.pushStack( winnow(this, selector || [], true) );},// 如果调用的jquery元素有一个符合selector返回trueis: function( selector ) {return !!winnow(this,// If this is a positional/relative selector, check membership in the returned set// so $("p:first").is("p:last") won't return true for a doc with two "p".typeof selector === "string" && rneedsContext.test( selector ) ?jQuery( selector ) :selector || [],false).length;}
0 0
- JQuery日记_5.20 JQuery对Sizzle选择器的扩展
- JQuery日记_5.14 Sizzle选择器(七)
- JQuery日记_5.13 Sizzle选择器(六)选择器的效率
- jQuery 的 Sizzle 选择器
- JQuery日记 5.11 Sizzle选择器(五)
- 初探 jQuery 的 Sizzle 选择器
- 初探 jQuery 的 Sizzle 选择器
- jQuery Sizzle选择器
- jquery选择器引擎Sizzle
- 养成使用jQuery Sizzle选择器的良好习惯
- jQuery选择器(Sizzle)的拆分
- 理解jQuery选择器与Sizzle
- jquery 选择器引擎sizzle浅析
- jQuery选择器引擎和Sizzle介绍
- jQuery选择器引擎和Sizzle介绍
- jQuery选择器探究:Sizzle构造函数
- jQuery Sizzle
- jQuery-1.9.1源码分析系列(三) Sizzle选择器引擎——一些有用的Sizzle API
- Mysql最新驱动jar包存在bug?
- 十七道海量数据处理面试题与Bit-map详解
- Asp.net Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则
- IT类研究生入行最高25万 一年干两年活
- 小弟今天看到有些模块周围一圈都是邮票孔,不知道哪位大侠做过邮票孔焊盘,可否告知一下画法,不胜感激!!!
- JQuery日记_5.20 JQuery对Sizzle选择器的扩展
- android.library.reference.1值变成绝对路径在windows下有bug
- 判断DataTable中否存在指定列
- Doubles - POJ 1552 水题
- 【Unity Shaders】Lighting Models —— 光照模型之Lit Sphere
- Freemarker内置函数,数字,字符串,日期格式化(很好用的,省了不少事)
- 【C语言】15-预处理指令1-宏定义
- 1!+3!+5!+...+99!的阶乘
- linux系统/etc/hosts文件