6

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

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

このソリューションを高速化する方法についてのアイデアはありますか?

4

5 に答える 5

10

Google で大文字と小文字を区別しない検索の別の解決策を見つけました ( Eric Phanを参照)。これは、最初に使用していたものとは少し異なります。

オリジナル:

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

エリックファン:

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

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

ちょっと気になったので、フォローアップの質問をしjQuery.text()ます。なぜそんなに遅いのですか?私は私の推測を持っていますが、専門家の意見を聞きたいです。

最後に、回答してくださった皆様、ありがとうございました。あなたの助けに感謝します。=)

于 2009-09-11T16:23:02.743 に答える
6

ユーザーがキーストロークごとではなく、指定された時間入力を停止した後、セレクターを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
    }  
}();
于 2009-09-10T20:45:01.093 に答える
1

ここにフォローアップの質問があります: jQuery.text() との取引は何ですか? なぜそんなに遅いのですか?

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

于 2011-01-06T00:55:35.437 に答える
1

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

于 2009-09-10T20:11:26.050 に答える
0

ジェイソンが言ったことに追加するには、このプラグインを使用してそれを達成することができます.

于 2009-09-10T20:16:47.057 に答える