Pertanyaan pemilih CSS yang rumit, tidak tahu apakah itu mungkin.
Katakanlah ini adalah tata letak HTML:
<div></div>
<div></div>
<div></div>
<div style="display:none"></div>
<div style="display:none"></div>
Saya ingin memilih yang terakhir div
, yang ditampilkan (mis. Tidak display:none
) yang akan menjadi yang ketiga div
dalam contoh yang diberikan. Pikiran Anda, jumlah div
s pada halaman nyata dapat berbeda (bahkan display:none
yang).
html
css
css-selectors
Vishal Shah
sumber
sumber
Jawaban sebenarnya untuk pertanyaan ini adalah, Anda tidak bisa melakukannya. Alternatif untuk jawaban khusus CSS bukan jawaban yang benar untuk pertanyaan ini, tetapi jika solusi JS dapat Anda terima, maka Anda harus memilih salah satu dari jawaban JS atau jQuery di sini. Namun, seperti yang saya katakan di atas, jawaban yang benar dan benar adalah bahwa Anda tidak dapat melakukan ini dengan andal di CSS kecuali Anda bersedia menerima
:not
operator dengan[style*=display:none]
dan penyeleksi negatif lainnya, yang hanya bekerja pada gaya inline, dan secara keseluruhan buruk larutan.sumber
:not
operator seperti yang Anda nyatakan dapat bekerja dalam keadaan tertentu. Misalnya, ini berfungsi dengan baik untuk situasi saya di mana saya memiliki elemen bersembunyi JS bersyarat yang kemudian menambahkan gaya sebaris dan dengan demikian solusi Anda benar-benar berfungsi dengan baik :)Jika Anda dapat menggunakan gaya sebaris, maka Anda dapat melakukannya murni dengan CSS.
Saya menggunakan ini untuk melakukan CSS pada elemen berikutnya ketika yang sebelumnya terlihat:
sumber
[style*='display: block']
karena bisadisplay: block !important;
atau hanya<div style="display: block">
:-).btn-group > .btn.d-none + .btn
(digunakan untuk kelompok input bootstrap "Saya pikir itu tidak mungkin untuk memilih dengan nilai css (tampilan)
edit:
menurut pendapat saya, masuk akal untuk menggunakan sedikit jquery di sini:
sumber
Solusi JS murni (mis. Ketika Anda tidak menggunakan jQuery atau kerangka kerja lain untuk hal-hal lain dan tidak ingin mengunduh itu hanya untuk tugas ini):
http://jsfiddle.net/uEeaA/90/
sumber
Mencoba
div: not ([style * = "display: none"])
sumber
dengan cara lain, Anda dapat melakukannya dengan javascript, di Jquery Anda dapat menggunakan sesuatu seperti:
* diedit ulang
sumber
Tidak mungkin dengan CSS, namun Anda bisa melakukan ini dengan jQuery.
DEMO JSFIDDLE
jQuery:
HTML:
CSS:
jQuery (solusi sebelumnya):
sumber
$('li:visible:last').addClass('red')
.$('li').not(':hidden').last().addClass("red");
Jika Anda tidak lagi membutuhkan elemen yang disembunyikan, cukup gunakan
element.remove()
sajaelement.style.display = 'none';
.sumber
Ini berhasil untuk saya.
sumber