Ini tidak bisa dilakukan dengan CSS2.1, tapi mungkin dengan atribut CSS3 pemilih substring-matching (yang sedang didukung di IE7 +):
div[class^="status-"], div[class*=" status-"]
Perhatikan karakter spasi di pemilih atribut kedua. Ini mengambil div
elemen yang class
atributnya memenuhi salah satu dari kondisi ini:
[class^="status-"]
- dimulai dengan "status-"
[class*=" status-"]
- berisi substring "status-" yang terjadi langsung setelah karakter spasi. Nama kelas dipisahkan oleh spasi per spesifikasi HTML , karenanya karakter spasi yang signifikan. Ini memeriksa setiap kelas lain setelah yang pertama jika beberapa kelas ditentukan, dan menambahkan bonus memeriksa kelas pertama jika nilai atributnya adalah ruang-empuk (yang dapat terjadi dengan beberapa aplikasi yang menampilkan class
atribut secara dinamis).
Secara alami, ini juga berfungsi di jQuery, seperti yang ditunjukkan di sini .
Alasan Anda perlu menggabungkan dua penyeleksi atribut seperti dijelaskan di atas adalah karena pemilih atribut seperti [class*="status-"]
akan cocok dengan elemen berikut, yang mungkin tidak diinginkan:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Jika Anda dapat memastikan bahwa skenario seperti itu tidak akan pernah terjadi, maka Anda bebas menggunakan pemilih semacam itu demi kesederhanaan. Namun, kombinasi di atas jauh lebih kuat.
Jika Anda memiliki kendali atas sumber HTML atau aplikasi yang menghasilkan markup, mungkin lebih mudah untuk membuat status-
awalan kelasnya sendiri sebagaistatus
gantinya seperti yang disarankan Gumbo .
status-
dan Anda tidak ingin mencocokkannya, pemilih menjadi lebih rumit:div[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
Plus Anda kehilangan dukungan IE7 / IE8. Untungnya, jika markup Anda waras, Anda tidak perlu mengecualikan kelas seperti itu.[class*=" anim-overlay-"] a:hover:after{...}
. Kelas CSS saya adalahanim-overlay-1
,anim-overlay-2
.....anim-overlay-8
.anim-overlay-*{...}
?Penyeleksi Atribut CSS akan memungkinkan Anda untuk memeriksa atribut untuk string. (dalam hal ini - nama kelas)
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
(Sepertinya itu sebenarnya pada status 'rekomendasi' untuk 2.1 dan 3)
Berikut ini adalah garis besar bagaimana saya * pikir itu bekerja:
[ ]
: adalah wadah untuk penyeleksi kompleks jika Anda ...class
: 'class' adalah atribut yang Anda lihat dalam kasus ini.*
: modifier (jika ada): dalam hal ini - "wildcard" menunjukkan Anda sedang mencari kecocokan APAPUN.test-
: nilai (dengan asumsi ada satu) dari atribut - yang berisi string "test-" (yang bisa berupa apa saja)Jadi, misalnya:
Anda bisa lebih spesifik jika Anda memiliki alasan yang bagus, dengan elemennya juga
ul[class*='test-'] > li { ... }
Saya sudah mencoba menemukan case edge, tapi saya melihat tidak perlu menggunakan kombinasi
^
dan*
- karena * mendapatkan semuanya ...contoh: http://codepen.io/sheriffderek/pen/MaaBwp
http://caniuse.com/#feat=css-sel2
Segala sesuatu di atas IE6 akan dengan senang hati taat. :)
perhatikan bahwa:
[class] { ... }
Akan memilih apa pun dengan kelas ...
sumber
[class*='test-']
akan mencocokkan elemen seperti<div class='foo-test-bar'>
. Itulah satu sisi kasus yang membutuhkan menggabungkan ^ dan * seperti yang dijelaskan dalam jawaban saya. Dan IE6 tidak mendukung pemilih atribut.Ini tidak mungkin dengan penyeleksi CSS. Tetapi Anda bisa menggunakan dua kelas alih-alih satu, mis. Status dan penting alih-alih status penting .
sumber
Anda tidak dapat melakukan ini, tidak. Ada satu pemilih atribut yang sama persis atau parsial hingga tanda -, tetapi tidak berfungsi di sini karena Anda memiliki banyak atribut. Jika nama kelas yang Anda cari selalu menjadi yang pertama, Anda bisa melakukan ini:
Perhatikan bahwa ini hanya untuk menunjukkan pemilih atribut CSS mana yang paling dekat, tidak disarankan untuk menganggap nama kelas akan selalu ada di depan karena javascript dapat memanipulasi atribut.
sumber