私はこれを理解していませんでした。これは、大文字と小文字を区別しないフィルタリングに使用されます。
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」と呼ばれる配列の3番目の要素を取得します。この要素は、この時点では文字列である必要がありますが、大文字に変換されます。2つの大文字の文字列を比較しているため、関数全体で大文字と小文字が区別されなくなります。
したがって、indexOf( m[3].toUpperCase() )
a.textContentまたはa.innerText内の「m[3]」の位置を返します。
最後のビット>=0
は論理演算子です。indexOf()-Callの結果が0以上を返す場合、その位置で式全体が「true」になります。indexOf()は正確にこれ(ゼロ以上)を返すため、求められている文字列が見つかった場合、またはm[3]
内で見つかった場合は事実上「true」を取得します。a.textContent
a.innerText
そして、この値は、leadingreturn
キーワードを使用して関数から返されます。
--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.
}
};