1、()+)|()+) 这段是验证:last或者是:(xxx)这样的选择器var Sizzle = function(selector, context, results, seed) /确保代码不出错,上下文存在 results = results | ; context = context | document; /确保上下文是dom对象 if ( context.nodeType != 1 & context.nodeType != 9 ) return ; /确保选择器是String if ( !selector | typeof selector != string ) return r
2、esults; var parts = , m, set, checkSet, check, mode, extra, prune = true; / Reset the position of the chunker regexp (start from head) /重置正则得匹配位置 chunker.lastIndex = 0; while ( (m = chunker.exec(selector) != null ) parts.push( m1 ); if ( m2 ) extra = RegExp.rightContext; break; /Expr和Sizzle.selector
3、指向同一个对象,这个选择器和以前的不一样,是在没有用if else进行判断,而是用正则进行处理,具体的代码在定义Expr中。POS: /:(nth|eq|gt|lt|first|last|even|odd)(?(d*)?(?=-|$)/,下边的代码就是判断还有没有这样的特殊函数。 if ( parts.length 1 & Expr.match.POS.exec( selector ) ) /relative是函数对象,封装了+函数,意思就是typeof Expr.relative parts0 =Function if ( parts.length = 2 & Expr.relative p
4、arts0 ) var later = , match; / Position selectors must be done after the filter / 如果匹配到+,处理完之后(过滤上下文),选择器中的该符号去掉,再分析选择器 while ( (match = Expr.match.POS.exec( selector ) ) later += match0; selector = selector.replace( Expr.match.POS, ); set = Sizzle.filter( later, Sizzle( /s$/.test(selector) ? select
5、or + * : selector, context ) ); else set = Expr.relative parts0 ? context : Sizzle( parts.shift(), context ); while ( parts.length ) var tmpSet = ; selector = parts.shift(); if ( Expr.relative selector ) selector += parts.shift(); for ( var i = 0, l = set.length; i function(checkSet, part, isXML) /p
6、art是选择器 & !/W/.test(part) ) part = isXML ? part : part.toUpperCase(); var parent = elem.parentNode; checkSeti = parent.nodeName = part ? parent : false; elem.parentNode : elem.parentNode = part; /在给定的祖先元素下匹配所有的后代元素 var doneName = done + (done+), checkFn = dirCheck;part.match(/W/) ) var nodeCheck = p
7、art = isXML ? checkFn = dirNodeCheck; checkFn(parentNode, part, doneName, checkSet, nodeCheck, isXML); /匹配 prev 元素之后的所有 siblings 元素previousSibling /find对象的方法都是很简单了,前边也是做过解释 find: function(match, context) if ( context.getElementById ) var m = context.getElementById(match1); return m ? m : ; return co
8、ntext.getElementsByName ? context.getElementsByName(match1) : null; return context.getElementsByTagName(match1); /过滤之前处理选择器 preFilter: /css查找 function(match, curLoop, inplace, result, not) match = + match1.replace(/g, ) + curLoopi; /异域处理 if ( not ( + curLoopi.className + ).indexOf(match) = 0 ) inpla
9、ce ) result.push( curLoopi ); else if ( inplace ) curLoopi = false; return false; /ID查找,这个就很简单了 function(match) return match1.replace(/g, /TAG查找,返回标签的大写字符 function(match, curLoop)curLoopi; i+ ) return isXML(curLoopi) ? match1 : match1.toUpperCase(); /奇偶或者是位置处理 if ( match1 = nth /解析位置比如event odd 5 2n 等等 / parse equations like even, odd52n3n+24n-1-n+6 var test = /(-?)(d*)n(?+|-)?d*)/.exec( match2 = even2n | match2 = odd2n+1 |
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1