1

我不明白这一点。这用于过滤不区分大小写:

jQuery.expr[':'].Contains = function(a,i,m){

   return (a.textContent
        || a.innerText
        || "").toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
4

2 回答 2

3

我们开始吧,编译器风格:

(a.textContent || a.innerText || "")

表示以下内容要么在 a.textContent 中定义的字符串上执行,要么在未设置的情况下在 a.innerText 上执行。两者通常都包含给定元素的文本内容,在这种情况下称为“a”。如果没有定义这些字符串,则使用空字符串来防止执行时出现以下错误。

.toUpperCase()

将该字符串(来自以下部分的结果)转换为大写,从而消除小写字母和大写字母之间的差异。

.indexOf( m[3].toUpperCase() )

indexOf() 获取位置,给定的参数字符串首先在执行它的字符串中找到。例如,("Hello").indexOf("e")将返回 1(请记住,我们从 0 开始计数)。

m[3] 获取名为“m”的数组的第三个元素——不管它是什么。这个元素,此时必须是一个字符串,然后也转换为大写。当我们现在比较两个大写字符串时,整个函数变得不区分大小写。

因此,indexOf( m[3].toUpperCase() )将返回“m[3]”在 a.textContent 或 a.innerText 中的位置。

最后一位>=0是逻辑运算符。如果 indexOf()-Call 的结果返回 0 或更高,它将在该位置将整个表达式变为“true”。由于 indexOf() 准确地返回这个 - 零或更高 - 如果找到了寻找的字符串,如果m[3]a.textContentor中找到,我们有效地得到一个“真” a.innerText

这个值是通过使用前导return关键字从函数返回的。

--Lukx

于 2012-05-19T10:49:32.840 回答
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.
    }
};
于 2012-05-19T10:54:09.123 回答