大文字と小文字を区別しないjQuery:containsセレクターのこのソリューションを高速化する方法はありますか?

StackOverflow https://stackoverflow.com/questions/1407434

質問

このソリューションが見つかりましたStackOverflowの大文字と小文字を区別しないjQuery :contains セレクター。うまく機能しますが、パフォーマンスが犠牲になります。このソリューションが少し遅いと思う人はいますか?

テーブルの検索に:contains セレクターを使用しています。ユーザーが検索文字列をテキストボックスに入力します。キーストロークごとに、テーブルでその文字列を検索し、:contains セレクターを介してその文字列を含む行のみを表示します。大文字と小文字を区別しないソリューションを実装する前は、この検索は迅速かつ迅速でした。このソリューションを使用すると、各キーストロークの後に短時間ロックされます。

このソリューションを高速化するためのアイデアはありますか?

役に立ちましたか?

解決

Googleで大文字と小文字を区別しない検索の別のソリューションが見つかりました( Eric Phan )は、元々使用していたものとは少し異なります。

オリジナル:

return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;

EricPhan:

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

2つを比較すると、Eric PhanのソリューションがDOM属性に直接アクセスし、 toUpperCase()の代わりに toLowerCase()を使用していることがわかります。後者は実際には重要ではありませんが、前者は大文字と小文字を区別しない検索のパフォーマンスを本当に改善したものです。元のソリューションを変更して、 jQuery(a).text()の代わりに(a.textContent || a.innerText ||"")を使用するだけで、差!

今私は少し興味がありますので、次の質問があります: jQuery.text()の対処法は?なぜそんなに遅いのですか?前提はありますが、専門家の意見を聞きたいです。

最後に、回答してくれたすべての人に感謝します。あなたの助けを感謝します。 =)

他のヒント

ユーザーがすべてのキーストロークではなく、指定した時間タイプを停止した後、セレクターを1回だけチェックしようとすることができます。

たとえば、簡単な実装:

使用法:

$("#textboxId").keyup(function () {
  typewatch(function () {
    // executed only 500 ms after the user stopped typing.
  }, 500);

実装:

var typewatch = function(){
    var timer = 0;  // store the timer id
    return function(callback, ms){
        clearTimeout (timer);  // if the function is called before the timeout
        timer = setTimeout(callback, ms); // clear the timer and start it over
    }  
}();

各キーストロークの後にチェックするのではなく、最後のキーストロークが押されてから1秒後にチェックすることもできます。この方法では、ユーザーが入力している間は常にチェックするのではなく、ユーザーが終了したときや入力を一時停止したときにチェックします。

  

フォローアップの質問:これは何ですか   jQuery.text()との取引?どうしてですか   とても遅いですか?

.text()ではなく、 $(a)(DOM要素をjQueryオブジェクトに変換するため)が遅いと思われます。

ジェイソンが言ったことに追加するには、このプラグインでそれを実現します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top