2013-06-13 5 views
6

大きなテーブルがあり、たくさんの行(50-200)と列(30)が含まれています。だから私は合計で少なくとも1500の細胞を持っています。次の指示のうち、どれが速く、なぜですか?jQuery:このケースではより高速です。(.find)vs(.filter)

//assuming we have some predefined variable 
var table = $('#myTable'); 
var allCells = table.find('td'); 

選択されたセルが

selectedCells = allCells.filter('.selected'); 

または、(パフォーマンスと可読性の用語で)選択を見つけるために、より良い、ネイティブjavascriptの方法があるのVSクラスselected

selectedCells = table.find('td.selected'); 

を持っている場合細胞は1500個の細胞がループすると考えていますか?

+5

自分で試してみてください:http://jsperf.com/ –

+0

@FelixKling私はそれを使用する方法がわかりません、あなたは私のためにそれを行うことはできますか? –

+0

既存のテストをご覧ください。 http://jsperf.com/jquery-selector-vs-standard-selector。 –

答えて

10

find()あなたのfilter()メソッドは、とにかくfind()に依存していますので、ここでは高速になります。あなたのコードから:

var allCells = table.find('td'); 

selectedCells = allCells.filter('.selected'); 

table.find('td.selected');selectedクラスでのみtd要素を引っ張ります。

table.find('td').filter('.selected')selectedクラスを持つ要素だけをフィルタリングし、その後すべてtd要素を引っ張ります。

+0

' .filter'は '.find'に依存しているのはなぜですか? –

+0

@FelixKlingそうではありません。フィルタは、あらかじめ選択されたオブジェクトのセットに依存します。この場合、それらのオブジェクトは 'find()'を使って選択されています。 "一致する要素のセットをセレクタに一致するものに減らすか、関数のテストに渡します。" http://api.jquery.com/filter/ –

+0

あなたがこの文脈でのみ意味するように、OPは '.filter'の前に' .find'をしています(これは簡単に誤解されるかもしれませんが、あなたの 'filter()'メソッド ")")。私はOPの*常に* 'var allCells = table.find( 'td');'を実行すると仮定していたので、 '.filter'を使うと' .find'でセルを再び検索するよりも良いでしょう。 。しかし、誰が知っている:) –

関連する問題