2012-01-18 7 views
1

ここに私のコードです...私がしようとしているのは、データベースから引っ張っているレコードの "データセット"を介してjqueryを使用してフィルタをかけることです。レコードをフィルタリングするためのJQueryコード。最高のテクニック/コード

これは私のコードですが、非常に不十分です。

<script> 
$(document).ready(function(){ 
    $("#descriptionField").bind('keyup',function(e){ 
     var filter = $(this).val(); 
     if(filter) 
     { 
      $("#list").find("a:not(:contains(" + filter + "))").parent().slideUp(); 
      $("#list").find("a:contains(" + filter + ")").parent().slideDown(); 
     } 
    }); 
}); 
</script> 
+0

削除:ここ

$(function(){ var $A = $('#list').find('a'); $("#descriptionField").bind('keyup',function(e){ var filter = this.value; if(filter.length > 0) { $A.filter(function() { return ($(this).text().indexOf(filter) === -1) }).parent().hide(); $A.filter(function() { return ($(this).text().indexOf(filter) > -1) }).parent().show(); } }); }); 

.filter():contains()の上には、使用してパフォーマンスの向上を表示するjsperfですslideUpとslideDown機能を追加し、すべてのキーアップで動作しないようにスロットルを追加します。 –

+0

これはhttp://codereview.stackexchange.comに属します。 – BalusC

+0

これがなぜ動かされずに閉じられたのか不思議です。 – Jasper

答えて

1

あなたが複数回慣れる常にキャッシュ選択ができます。

$(function(){ 
    var $A = $('#list').find('a'); 
    $("#descriptionField").bind('keyup',function(e){ 
     var filter = this.value; 
     if(filter.length > 0) 
     { 
      $A.filter(":not(:contains(" + filter + "))").parent().hide(); 
      $A.filter(":contains(" + filter + ")").parent().show(); 
     } 
    }); 
}); 

は私がアニメーション slideDown()slideUp()機能が show()hide()集中的少ないCPUを求めて削除しました。また、jQueryを使用して入力の値を取得する代わりに、私は this.valueを使用しました。

代わり:not():contains()の擬似セレクタを使用してのあなたはこれを行うにはfilter()を使用することができます。http://jsperf.com/jquery-contains-vs-filter

+0

キャッシングのもう1つの方法は、以前に使用されたフィルター・キーワードを保管するイベント・バインディングの外にオブジェクトを作成することです。フィルタがすでに完了している場合、そのフィルタから選択した要素を使用して表示と非表示を切り替えます。 –

+0

スライドアップとダウンを置き換えて表示と非表示を切り替えました。とても早い。私たちが必要としていただけです。手伝ってくれてどうもありがとう。 –

+0

@トニーようこそ。 '.filter()'アプローチに変更すると、パフォーマンスがさらに向上します。 – Jasper

関連する問題