2011-01-04 6 views
5

私はclass = 'class1'を持つ多くのhtmlタグを持っています。彼らはすべて/となり、常に同じタイプの要素になります。例えば、入力要素。Jqueryセレクタ、htmlタグのタイプを指定する必要がありますか?

$("input.class1") 

$(".class1") 

感謝の性能差があります!

注:この場合、特にIE8に関連する情報が必要ですが、クロスブラウザソリューションのことが重要です。私のクライアントはIE8しか使用できないので、IE8専用のベストアンサーがあります。

+0

このケースでは私のクライアントはie8しか実行できないことに注意してください。 – kralco626

+0

この情報をあなたの質問に編集することを検討します。答えは、jQueryコードを書く人が同じではないからですのブラウザ。 – adamjford

答えて

5

はい、パフォーマンスの違いがあります。後者の場合、セレクタエンジンはほとんどの主要なブラウザに存在するネイティブのgetElementsByClassNameメソッドを使用することができ、そのメソッドをサポートしないブラウザでは少し遅くなりますまたはquerySelectorAll。前者は、をサポートするブラウザではより速くなりますが、getElementsByClassName(これはかなりIE 8です)ではなく、おそらくあなたの状況の後者ほど速くない可能性があります。

ご使用のシナリオでは、$(".class1")を使用してください。

+0

使用しているブラウザによってはパフォーマンスの違いがありますが、全体的な使用にはどちらが良いですか? – adamjford

+0

この特定のケースでは、内部アプリケーションを開発していて、クライアントはie – kralco626

+0

@kralco:IE 6/7、またはIE 8しか使用できないことに注意してください。 –

0

はい、要素名を含めるとパフォーマンスが改善されます(getElementsByClassNameがネイティブまたはうまくサポートされていないブラウザの場合)。これにより、ブラウザは最初に標準の方法getElementsByTagNameを使用してドキュメントを削除し、そのクラスのためのそれらの間の検索。

+0

理由は何ですか? – Alexander

1

私は確信していますが、違いがあると思います。

例#1に入力要素がトラフを歩くと所定のクラス名を持つ要素を取得するためにのみ存在し、これは(はるかに?)であるべきである

(この例では#2等)のすべて要素ノードを歩くよりも速く

また、ブラウザのバージョンに依存する必要があります、私はjQueryもgetElementsByClassName()やquerySelectorAll()などのものを利用できると考えています。

+0

私はそれも考えましたが、今では入力を確認するためのすべての要素をチェックする方法と、入力ヘルパーなしでクラスをチェックするだけで、そのクラスを持っているかどうかを確認する方法はありますか? – kralco626

+0

getElementsByTagName()は最初のステップです( '入力'またはワイルドカード '*'と一緒に使用されます)。速度を見ても大きな違いはありません。しかし結果は異なります。もちろん、10要素だけでなく100要素でDOMNodeListを処理するには、より多くの時間が必要です。そしてそれが第2のステップです。リストを歩いてクラス名で要素を取り出します。 –

+0

まあ、私は何を求めているかと思います。私はそれがどのように機能するのか分かりません。ステップがある場合。 1.クラス名で要素を探します。 2.リストを反復して、入力要素であるかどうかを判断します。そのクラス名のすべての要素が入力要素であれば、入力を指定しないほうが速いでしょう...いいえ? – kralco626

関連する問題