2013-05-08 12 views
5

xpath Ne olur eşdeğer CSS //div[contains(@class, 'a b') and not (contains(@style, 'c'))]Css seçici eşdeğer '[(a b // div, @class ') içeren'(c ') ve (@style içerir')]'

olduğunu seçici? İlk bit div[class*='a b'] almak kolay, ama onları nasıl reddetmek ve birleştirmek için?

+2

olurdu, senin '' o maç çünkü (@class, 'a b') 'yanlış olabilir içeriyor sınıf = 'da bd'. Bunun için doğru XPath 'içeriyor (concat ('', @ class, ''), 'a b')'. –

+0

Mantıklı. Yani div [class * = 'a b'] 'match' class = 'da bd'? Öyleyse eşdeğer css seçicisi nedir? (Concat ('', @ class, ''), 'a b') '? –

+1

@ user1177636: Evet. Buna eşdeğer .a.b'dir. – BoltClock

cevap

7

. Bunları birleştirmek için, zaten sahip olduğunuzun sonuna :not() ekleyin. @BoltClock @ BenjaminGruenbaum cevabı yaptığı açıklamada da anlaşılacağı gibi

eşdeğer CSS seçici

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

a ve b numaralı div öğelerini seçmek isterseniz div.a.b'u kullanabilirsiniz.

bunu kullanabilirsiniz c değere sahip bir stil özelliği içeren değil isterseniz: Sen :not() seçici ve style özellik için başka özellik seçici kullanılarak etkisiz hale

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

Teşekkürler, deneyecek. Div.a.b: ([style * = c]) 've' div [class * = 'a b']: değil ([style * = c]) '' eşdeğer mi? Sınıf isimlerinin sırası bazı garip durumlarda önemli midir? –

+0

Bu gibi durumlar hiç de garip değil :) –

+0

@ user1177636: Hayır, eşdeğer değiller. 'div.ab' yalnızca 'a' ve 'b' sınıflarıyla eşleşir, oysa div [class * = 'a b'] ', birincisi bir dizi ile eşleşir; B ile. Bu, "b" nin eşleşeceği, "bb" gibi bir şeyin de eşleşeceği anlamına gelir. Eğer gerçekten '.a.b' ile eşleşmenin aksine '' ('class,' a b ')' gibi bir katı eşdeğerde istiyorsanız, öznitelik seçiciyi kullanın. Sınıf isimlerinin 'class' özniteliği içindeki sırası önemli değil, ancak bir öznitelik seçicisini kullanırsanız, bu durum biraz karışıklık yaratabilir. – BoltClock