我不明白这一点。这用于过滤不区分大小写:
jQuery.expr[':'].Contains = function(a,i,m){
return (a.textContent
|| a.innerText
|| "").toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
答案 0 :(得分:3)
这里我们去编译风格:
(a.textContent || a.innerText || "")
表示在a.textContent中定义的字符串上执行以下操作,或者如果未设置,则在a.innerText上执行以下操作。两者通常都包含给定元素的文本内容,在本例中称为“a”。如果没有定义这些字符串,则使用空字符串来防止执行时错误。
.toUpperCase()
将该字符串(来自以下部分的结果)转换为大写,从而消除小写和大写字母之间的差异。
.indexOf( m[3].toUpperCase() )
indexOf()获取位置,其中首先在执行的String中找到给定的参数字符串。例如,("Hello").indexOf("e")
将返回1(记住,我们从0开始计数)。
m [3]得到一个名为“m”的数组的第三个元素 - 无论它是什么。此元素在此时必须是String,然后也会转换为大写。正如我们现在比较两个大写字符串,整个函数变得不区分大小写。
因此,indexOf( m[3].toUpperCase() )
将在a.textContent或a.innerText中返回“m [3]”的位置。
最后一位>=0
是一个逻辑运算符。
如果indexOf() - Call的结果返回0或更高,它将在该位置将整个表达式转换为“true”。因为indexOf()正好返回 - 零或更高 - 如果找到所寻找的字符串,如果在m[3]
或a.textContent
中找到a.innerText
,我们将有效地获得“真”。
使用前导return
关键字从函数返回此值。
- Lukx
答案 1 :(得分:0)
代码可以像这样重写一些更冗长,也许更容易理解。
jQuery.expr[':'].Contains = function(a,i,m){
var text;
if (typeof a.textContent !== 'undefined') {
text = a.textContent;
} else if (typeof a.innerText !== 'undefined') {
text = a.innerText;
} else {
text = "";
}
text = text.toUpperCase();
if (text.indexOf(m[3].toUpperCase()) >= 0) {
return true; // text contains the passed parameter
} else {
return false; // text didn't contain passed parameter.
}
};