2013-05-08 4 views
5

xpathが//div[contains(@class, 'a b') and not (contains(@style, 'c'))]CSSにセレクタ同等 '// divの[含まれています(@class、 'B')(C及びませんが(@styleを、含まれている ''))]'

何同等のCSSが希望ですセレクターは?簡単に最初のビットを取得するdiv[class*='a b']、どのように否定し、それらを組み合わせる?

+2

@BoltClockがBenjaminGruenbaumの答えを@に彼のコメントで暗示するように、あなたは '(@class、 'B')、それが一致してしまうため、' '、おそらく間違っているが含まれているだろうclass = 'da bd''。正しいXPathは 'contains(concat( ''、@ class、 '')、 'a b')'です。 –

+0

意味があります。それで 'div [class * = 'a b']' class '= 'da bd'と同様に一致するでしょうか?次に、それに相当するcssセレクターが 'contains(concat( ''、@ class、 '')、 'a b')'ですか? –

+1

@ user1177636:はい。これに相当するのは '.a.b'です。 – BoltClock

答えて

7

あなたはstyle属性の:not()セレクタと別の属性セレクタを使用して否定します。それらを組み合わせるには、既に持っているものの最後に:not()を付けてください。

同等のCSSセレクタが

div[class*='a b']:not([style*='c']) 
5

abの両方の要素を持つdiv要素を選択する場合は、div.a.bを使用できます。

あなたはそれはあなたが使用できる値cとスタイル属性が含まれていない場合:

div.a.b:not([style*=c]) 
+0

ありがとうございます。 'div.a.b:not([style * = c])'と 'div [class * = 'a b']:not([style * = c])'は同等でしょうか?いくつかの奇妙なケースでは、クラス名の順序が重要ですか? –

+0

このようなケースは全く奇妙ではありません:) –

+0

@ user1177636:いいえ、それらは同等ではありません。 'div.ab'はクラス' a'と 'b'にのみマッチしますが、' div [class * = 'a b'] 'は2つのクラスのセットにマッチし、最初は' a'で終わり、 「b」である。これは 'a b 'が一致する間、' ba bb'のようなものも一致することを意味します。単に '.a.b'にマッチするのではなく、' contains(@class、 'a b') 'と厳密に等価なものが必要な場合は、属性セレクタを使います。 'class'属性内のクラス名の順序は重要ではありませんが、属性セレクタを使用すると、少し混乱するかもしれません。 – BoltClock

関連する問題