理解用于过滤的一段jQuery代码

时间:2012-05-19 10:34:44

标签: jquery filter

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

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

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

2 个答案:

答案 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.
    }
};