2012-06-13 2 views
8

はのは、私はいくつかのselect要素

<TR style = "background-color : red ;"> 

といくつかの

<TR> 

を持っているとしましょう(そのスペースコロンの隣とに注意すべき

:私が扱っていたページがそのように書かれているので、セミコロンは、この、今)、

意図的です

は完全に機能します。しかし、hereと書かれています。

[name!= "value"]ネイティブDOM querySelectorAll()メソッドによって提供されるパフォーマンスの向上を利用できません。最近のブラウザでのパフォーマンスを向上させるために、$(「あなたの-純粋なCSSセレクタ」)を使用しない(「[名前は= 『値』]」)の代わりに

ので、私は思っていた:私の式がベストです1つまたはそれ以上のもの:

$('.detailtable tr').not('[style~="darkgray"]') // this doesn't work! 

の方が優れていますか?この最後の表現を書く正しい方法は何ですか?興味深いことに

+0

'$( '。detailtable tr')。( '[style〜=" darkgray "]')'は同じように動作するはずです。パフォーマンスが心配な方は、http://jsperf.com/をテストしてください。 –

+0

$( '。detailtable tr')のコメントに書いたように( '[style〜= "darkgray"]')は動作しません... – Pierpaolo

答えて

20

あなたが本当に「は属性内の文字列が含まれていないという要素を選択」したい場合はそのように、あなたは、*=代わりの~=を使用する必要があります。

$('.detailtable tr').not('[style*="darkgray"]'); 

ここfiddleです。


そして、いや、.notを使用することは、おそらく速くはありません。querySelectorAllはそのセレクタをそのまま解析できるはずです。

これを参照してくださいfiddle


編集:あなたはIE8を気にした場合、その、あなたに小さなパフォーマンスの向上を与える代わりに:notセレクタの.not方法を使用して、ずっと。この理由は非常に簡単です:IE8は属性セレクタをサポートしますが、否定セレクタはサポートしません。

+0

はい、それは有効なCSSセレクタであるため、 'querySelectorAll()'で動作します。関連項目:[jQueryとCSSの間の:not()セレクタの違いは何ですか?](http://stackoverflow.com/questions/10711730/whats-the-difference-in-the-not-selector-between- jquery-and-css)(私は人々がどのようにパフォーマンスを気にしなくてはならないかについての小さなセクションを書くつもりでしたが、私は人々がすでにそれを読んで気にするパフォーマンスについてあまり気にしていないと考えました。それを書く...) – BoltClock

+0

@BoltClock - もちろん、ネイティブ ':not 'セレクタとjQueryの違いは':not'です。しかし、この場合、ネイティブの実装がそれをうまく処理すると仮定することは安全です。 –

+0

@BoltClock - パフォーマンスは大変気になりますが、私は喜んであなたの意見を聞きます。ケアを共有する?たとえそれが小説ブックの長さだったとしても、私はそれを読んでいました... –

0

I'd suggest you take a look at this.

予め

おかげで、疑似セレクタ(様「:しない」)は、実際に最初のセレクタに次の関数を使用するよりも遅くなる傾向があります。実際...彼らは明らかに「2倍遅い」。

私は引用:

  1. $("#id p");
  2. $("#id").find("p");

それは第二の方法は、二倍の速最初として以上になる可能性が ことを学ぶためにあなたを驚かせるでしょうか?あなたのコードがうまく実行されていることを確認する際に、 セレクタが他の人よりも優れている(そして理由は)かなり重要な建物であることを知っているとブロックされます。

私は.notと行きたいです。

+0

どうやら?私にはない。 – BoltClock

+0

http://jsperf.com/id-vs-class-vs-tag-selectors/2によると、疑似セレクタはすべてのセレクタの中で最も遅いです。 jQuery関数を後で連鎖させるよりも速いという証拠は見つかりませんでした。それではまた、証拠が見つからなかったからといってそれが存在しないというわけではありません。 :) – cereallarceny

0

W3C Recommendationから、現在使用しているものはdocument.querySelectorAll()でも完璧に正常に動作するはずです。

おそらく、期待どおりに動作するかどうかテストできます。

+0

':not()'がドラフトに何年も前に追加され、すぐにjQueryがそれを手に入れました... – BoltClock

+0

@BoltClock [selectors table] http://www.w3.org/TR/css3-selectors/#selectors)は、否定擬似クラスの「CSSレベルで最初に定義された」列に「3」と記載されています。それで、私はこれがセレクタリストの最近の追加だと思った。 これがjQueryで以前に取り上げられたことを確認するための参考資料を提供してください。 編集する前にお返事をお待ちしています。 – Sujay

+0

CSS3は最近勧告されただけですが、10年以上もドラフトされていて、 ':not()'はまもなく存在しています(仕様ページに行き、 "Previous version"をクリックし続けます)。 jQueryは最初の大規模な安定版リリースで ':not()'と一緒に出荷されました。これは[docs](http://api.jquery.com/not-selector)の "version added:1.0"と書かれています。 – BoltClock