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

理解一段用于过滤的jQuery代码,jquery,filter,Jquery,Filter,我不明白。这用于过滤不区分大小写的内容: jQuery.expr[':'].Contains = function(a,i,m){ return (a.textContent || a.innerText || "").toUpperCase().indexOf(m[3].toUpperCase())>=0; }; 我们开始吧,编译器风格: (a.textContent || a.innerText || "") 表示对a.textContent

我不明白。这用于过滤不区分大小写的内容:

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

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

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

(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())
将返回a.textContent或a.innerText中“m[3]”的位置

最后一位,
=0
是一个逻辑运算符。 如果indexOf()调用的结果返回0或更高,它将在该位置将整个表达式转换为“true”。由于indexOf()返回的正是这个值(零或更高),因此,如果在
a.textContent
a.innerText
中找到了
m[3]
,则我们实际上会得到一个“true”

该值通过使用前导的
return
关键字从函数返回


--Lukx

代码可以像这样重写得更详细一些,也许更容易理解

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