jQuery选择器源码解读(四):expr.prefilter的标记方法

jQuery选择器源码解读(四):expr.prefilter的标记方法
expr.prefilter是预处理三选标记方法属性,方法的孩子,和伪。以下是如下:

expr.prefilter:{
属性:功能(选配){
*
*完成下列任务
* 1,属性名解码
* 2,属性值解码
* 3,判断字符是否是善良的,两边是空格属性值。
* 4,返回最终的匹配对象
*
*匹配{ 1 }表示属性名,
*匹配{ 1 }。取代(江湖,funescape):解码属性名称的十六进制数
*单字节Unicode字符或双字节Unicode字符(中文或其他需要两个字节的单词)
*正则表达式的详细描述可以在我对jQuery选择器正则表达式文章的详细解释中看到。
* /
比赛{ 1 } =比赛{ 1 }。取代(江湖,funescape);

*
*解码属性值
*匹配{ 4 }:表示放置在单个或双引号中的属性值。
*匹配{ 5 }:引号中不包含的属性值
* /
比赛{ 3 } =(匹配{ 4 }与{ 5 } | | | | (江湖。代替),
funescape);

*
在单词的W3C定义中,单词的平均值是将不同的单词符号分隔为空白。
*在比赛{ 3 }双方空间添加后,指标可以用来正确识别词的存在。
* /
如果(匹配{ 2 } =)
匹配{ 3 } ++匹配{ 3 } + ;
}

*
*返回有用的前四个元素的结果。
* /
返回match.slice(0, 4);
},

子:函数(匹配){
*
*完成下列任务:
* 1,将字符转到命令类型,然后将字符转换为小写字符。
* 2,用选择器从n开始,检查括号中的数据有效性。
* 3、比赛{ 4 },{ 5 }店与X和B在Xn + B分别为X和B可以是负数
* 4,返回最终匹配对象
*
*一个匹配{ 1 }:(只|第一|最后| n | n最后)
* /
比赛比赛{ 1 } = { 1 }。toLowerCase();

*
*为n个子类型的四个类型的括号、n个第n个最后个子和第n个最后类型设置有效的数据。
*但在其他括号中不允许数据。
* /
如果(匹配{ 1 }。切片(0, 3)= n){
*
*如果选择器括号中没有有效参数,则抛出异常。
*例如:如果选择器是n或n(abc),则选择器是非法选择器。
* /
如果(!匹配{ 3 }){
Sizzle.error(赛{ 0 });
}
*
*以第n个子()为例,介绍语法,以便更好地理解以下代码的功能
* n个子允许使用以下几种方法:
*第n个子(偶数)
*第n个子(奇数)
*:nth-child(3N)
*第n个子(+ 2n + 1)
*:nth-child(2n-1)
*下面代码中的赋值码左边的匹配{ 4 }和匹配{ 5 }用于记录括号中n和n前后的值,包括正负数字。
*:n个子(偶数)和n个子(奇数),匹配{ 4 }是空的,
**返回2(匹配{ 3 } = = = = = =甚至比赛{ 3 } 奇| |)结果
*因真实= 1,JS假= 0,所以(匹配{ 3 } = 甚至| |比赛{ 3 } =奇)等于1
* * 2(匹配{ 3 } = 甚至| |比赛{ 3 } =奇)的计算结果是2
*
*等号右边的+是强制类型转换,将后续字符串转换为数字类型。
* /
比赛{ 4 } =(匹配{ 4 } { 5 } + +比赛(比赛{ 6 } | | 1)
2:*(匹配{ 3 } = 甚至| |比赛{ 3 } =奇));
比赛{ 5 } = +((比赛{ 7 } +匹配{ 8 })| |比赛{ 3 } =奇);

否则如果(匹配{ 3 }){ }
*
*如果不是子类型的其他子类型选择器从括号描述开始,则抛出异常。
*这里的jQuery不是严格按照W3C的规则来确定的,因为它允许这种形式的第一个孩子()的存在。
*对于jQuery,第一个子()相当于:第一个孩子,一个合法的选择器。
* /
Sizzle.error(赛{ 0 });
}

返回匹配;
},

伪:函数(匹配){
*
*完成下列任务:
* 1,获取包含在伪类中的引号中的值。
* 2。对于非引用值,如果有一个伪类嵌套,则当前伪类的实际结束位置将进一步得到解决
*获取当前伪类的完整字符串和值。
* 3,返回比赛前三项的副本。
*
*引号表示不是封闭在括号中的值,
*:情商(2),作为一个例子,非上市= 2
* /
无功过剩,非上市=!匹配{ 5 }匹配{ 2 };

*
*因为伪和子的匹配正则表达式有交集,所以属于子类的部分需要被忽略。
* /
如果(MatchExpr {孩子}。试验(匹配{ 0 })){
返回null;
}
*
*如果括号中的值用引号括起来(匹配{ 3 }),
*除引号之外的值(匹配{ 4 })被赋值给匹配{ 2 }。
*匹配{ 3 }代表引号。
* /
如果(匹配{ 3 }匹配{ 4 })!=未定义的){
匹配{ 2 } =匹配{ 4 };
其他(非上市如果}
*
* rpseudo.test(非上市):用来测试是否含有伪类非上市,
*如果伪类包括,对伪类嵌套的可能性是可能的,和不带引号的需要进一步分析。
*例如:不(::EQ(3))
* /
rpseudo.test(非上市)

*
*在未得到持续、有效的选择的最后一个字符的位置
* /
(过剩=标记(加引号,真的))

*
* unquoted.indexof()
*在从上一个位置获得连续有效的选择器的最后一个字符后,定位的位置,
*通常在当前职位之后。
*然后减去unquoted.length得到有效的、完全的伪类字符串的匹配{ 0 }最后的位置,
*注意此时过剩是负值。
*
* /
(多余的= unquoted.indexof()
过量)
-没有上市。长度)){

获取完整的伪类匹配{ 0 }括号中有效和伪类数据匹配{ 2 }
匹配{ 0 } =匹配{ 0 }。切片(0,过量);
比赛{ 2 } = unquoted.slice(0,多余的);
}

在返回到匹配元素之前的三个副本
返回match.slice(0, 3);
}
}
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部