Apakah ada cara untuk memilih / memanipulasi elemen pseudo-CSS seperti ::before
dan::after
(dan versi lama dengan satu semi-colon) menggunakan jQuery?
Misalnya, stylesheet saya memiliki aturan berikut:
.span::after{ content:'foo' }
Bagaimana saya bisa mengubah 'foo' menjadi 'bar' menggunakan jQuery?
javascript
jquery
css
jquery-selectors
pseudo-element
JBradwell
sumber
sumber
Jawaban:
Anda juga bisa meneruskan konten ke elemen pseudo dengan atribut data dan kemudian menggunakan jQuery untuk memanipulasi itu:
Dalam HTML:
Di jQuery:
Dalam CSS:
Jika Anda ingin mencegah 'teks lain' muncul, Anda dapat menggabungkan ini dengan solusi seucolega seperti ini:
Dalam HTML:
Di jQuery:
Dalam CSS:
sumber
attr
fungsi itu terhadapcontent
properti? Saya terkejut saya belum pernah mendengar ini ...attr()
, sayang sekali saya tidak dapat menggunakannya dengan properti selaincontent
. Demoattr()
lebih dari CSS2, sedangkan di CSS2 itu sendiriattr()
hanya didefinisikan untukcontent
properti.:before
, ia mendukungattr()
dalam CSSAnda akan berpikir ini akan menjadi pertanyaan sederhana untuk dijawab, dengan segala hal lain yang dapat dilakukan jQuery. Sayangnya, masalahnya adalah masalah teknis: css: setelah dan: sebelum aturan bukan bagian dari DOM, dan karena itu tidak dapat diubah menggunakan metode DOM jQuery.
Ada yang cara untuk memanipulasi elemen-elemen ini menggunakan JavaScript dan / atau CSS workarounds; mana yang Anda gunakan tergantung pada kebutuhan Anda.
Saya akan mulai dengan apa yang secara luas dianggap sebagai pendekatan "terbaik":
1) Tambah / hapus kelas yang telah ditentukan
Dalam pendekatan ini, Anda sudah membuat kelas di CSS Anda dengan gaya
:after
atau:before
gaya yang berbeda . Tempatkan kelas "baru" ini nanti di stylesheet Anda untuk memastikannya menimpa:Kemudian Anda dapat dengan mudah menambah atau menghapus kelas ini menggunakan jQuery (atau vanilla JavaScript):
Tampilkan cuplikan kode
:before
atau:after
tidak sepenuhnya dinamis2) Tambahkan gaya baru langsung ke stylesheet dokumen
Dimungkinkan untuk menggunakan JavaScript untuk menambahkan gaya langsung ke stylesheet dokumen, termasuk
:after
dan:before
gaya. jQuery tidak menyediakan jalan pintas yang mudah, tetapi untungnya JS tidak terlalu rumit:Tampilkan cuplikan kode
.addRule()
dan.insertRule()
metode terkait didukung dengan cukup baik hari ini.Sebagai variasi, Anda juga dapat menggunakan jQuery untuk menambahkan stylesheet yang sama sekali baru ke dokumen, tetapi kode yang diperlukan tidak pembersih:
Tampilkan cuplikan kode
Jika kita berbicara tentang "memanipulasi" nilai-nilai, tidak hanya menambahkannya, kita juga dapat membaca yang ada
:after
atau:before
gaya menggunakan pendekatan yang berbeda:Tampilkan cuplikan kode
Kita dapat mengganti
document.querySelector('p')
dengan$('p')[0]
ketika menggunakan jQuery, untuk kode yang sedikit lebih pendek.3) Ubah atribut DOM yang berbeda
Anda juga dapat menggunakan
attr()
CSS Anda untuk membaca atribut DOM tertentu. ( Jika browser mendukung:before
, ia mendukungattr()
juga. ) Dengan menggabungkan ini dengancontent:
beberapa CSS yang disiapkan dengan hati-hati, kami dapat mengubah konten (tetapi bukan properti lain, seperti margin atau warna) dari:before
dan:after
secara dinamis:JS:
Tampilkan cuplikan kode
Ini dapat dikombinasikan dengan teknik kedua jika CSS tidak dapat dipersiapkan sebelumnya:
Tampilkan cuplikan kode
attr
dalam CSS hanya dapat diterapkan pada string konten, bukan URL atau warna RGBsumber
Meskipun mereka di-render oleh browser melalui CSS seolah-olah mereka seperti elemen DOM nyata lainnya, elemen pseudo itu sendiri bukan bagian dari DOM, karena elemen pseudo, seperti namanya, bukan elemen nyata, dan karena itu Anda tidak bisa pilih dan memanipulasi mereka secara langsung dengan jQuery (atau API JavaScript apa pun dalam hal ini, bahkan API Selectors ). Ini berlaku untuk elemen pseudo apa saja yang gayanya ingin Anda modifikasi dengan skrip, dan bukan hanya
::before
dan::after
.Anda hanya dapat mengakses gaya elemen semu langsung pada saat runtime melalui CSSOM (think
window.getComputedStyle()
), yang tidak diekspos oleh jQuery di luar.css()
, metode yang tidak mendukung elemen pseudo juga.Namun, Anda selalu dapat menemukan cara lain di sekitarnya, misalnya:
Menerapkan gaya pada elemen pseudo dari satu atau beberapa kelas arbitrer, lalu beralih di antara kelas (lihat jawaban seucolega untuk contoh cepat) - ini adalah cara idiomatis karena menggunakan penyeleksi sederhana (yang elemen pseudo tidak) untuk membedakan antara elemen dan status elemen, cara mereka dimaksudkan untuk digunakan
Memanipulasi gaya yang diterapkan ke kata elemen semu, dengan mengubah stylesheet dokumen, yang jauh lebih dari peretasan
sumber
Anda tidak dapat memilih elemen semu di jQuery karena mereka bukan bagian dari DOM. Tapi Anda bisa menambahkan kelas tertentu ke elemen ayah dan mengontrol elemen semu di CSS.
CONTOH
Di jQuery:
Dalam CSS:
sumber
Kita juga dapat mengandalkan properti khusus (alias variabel CSS) untuk memanipulasi elemen semu. Kita dapat membaca dalam spesifikasi bahwa:
Mempertimbangkan hal ini, idenya adalah untuk mendefinisikan properti kustom dalam elemen dan elemen pseudo akan mewarisinya; dengan demikian kita dapat dengan mudah memodifikasinya.
1) Menggunakan gaya inline :
2) Menggunakan CSS dan kelas
3) Menggunakan javascript
4) Menggunakan jQuery
Itu juga dapat digunakan dengan nilai-nilai kompleks:
Anda mungkin memperhatikan bahwa saya sedang mempertimbangkan sintaksis di
var(--c,value)
manavalue
nilai default dan juga disebut nilai fallback.Dari spesifikasi yang sama kita dapat membaca:
Dan kemudian:
Jika kami tidak menetapkan properti khusus ATAU kami mengaturnya ke
initial
ATAU itu berisi nilai yang tidak valid maka nilai fallback akan digunakan. Penggunaaninitial
dapat membantu jika kita ingin mengatur ulang properti khusus ke nilai standarnya.Terkait
Bagaimana cara menyimpan nilai inherit di dalam properti khusus CSS (alias variabel CSS)?
Properti khusus CSS (variabel) untuk model kotak
Harap dicatat bahwa variabel CSS mungkin tidak tersedia di semua browser yang Anda anggap relevan (misalnya IE 11): https://caniuse.com/#feat=css-variables
sumber
Sejalan dengan apa yang disarankan Christian, Anda juga bisa melakukan:
sumber
Berikut cara untuk mengakses: setelah dan: sebelum properti style, didefinisikan dalam css:
sumber
JIKA Anda ingin memanipulasi :: sebelum atau :: setelah elemen sudo sepenuhnya melalui CSS, Anda bisa melakukannya JS. Lihat di bawah;
Perhatikan bagaimana
<style>
elemen memiliki ID, yang dapat Anda gunakan untuk menghapusnya dan menambahkannya lagi jika gaya Anda berubah secara dinamis.Dengan cara ini, elemen Anda adalah gaya persis seperti yang Anda inginkan melalui CSS, dengan bantuan JS.
sumber
satu cara yang berfungsi tetapi tidak terlalu efisien adalah dengan menambahkan aturan ke dokumen dengan konten baru dan merujuknya ke kelas. tergantung pada apa yang dibutuhkan, kelas mungkin memerlukan id unik untuk setiap nilai dalam konten.
sumber
Ini HTML-nya:
Gaya dihitung pada 'sebelum' adalah
content: "VERIFY TO WATCH";
Berikut adalah dua baris jQuery saya, yang menggunakan gagasan menambahkan kelas tambahan untuk secara khusus mereferensikan elemen ini dan kemudian menambahkan tag gaya (dengan tag! Penting) untuk mengubah CSS dari nilai konten sudo-elemen:
$("span.play:eq(0)").addClass('G');
$('body').append("<style>.G:before{content:'NewText' !important}</style>");
sumber
Terima kasih semua! saya berhasil melakukan apa yang saya inginkan: D http://jsfiddle.net/Tfc9j/42/ di sini kita lihat
Saya ingin opacity div luar berbeda dari opacity div internal dan perubahan itu dengan klik di suatu tempat;) Terima kasih!
sumber
append
, gunakanhtml
yang terbaik cegahAnda dapat membuat properti palsu atau menggunakan yang sudah ada dan mewarisinya dalam stylesheet pseudo-element.
Tampaknya itu tidak berfungsi untuk properti "content" :(
sumber
Ini tidak praktis karena saya tidak menulis ini untuk penggunaan dunia nyata, hanya untuk memberi Anda contoh tentang apa yang dapat dicapai.
ini saat ini menambahkan a / atau menambahkan elemen Style yang berisi atribut yang diperlukan Anda yang akan mempengaruhi elemen target setelah elemen Pseudo.
ini dapat digunakan sebagai
dan
seperti setelah: dan sebelumnya: elemen pseudo tidak dapat diakses langsung melalui DOM, saat ini tidak mungkin untuk mengedit nilai-nilai spesifik dari css secara bebas.
cara saya hanyalah contoh dan itu tidak baik untuk latihan, Anda dapat memodifikasinya coba beberapa trik Anda sendiri dan membuatnya benar untuk penggunaan dunia nyata.
jadi lakukan eksperimen Anda sendiri dengan ini dan orang lain!
salam - Adarsh Hegde.
sumber
Saya selalu menambahkan fungsi utils saya sendiri, yang terlihat seperti ini.
atau memanfaatkan Fitur ES6:
sumber
Mengapa menambahkan kelas atau atribut ketika Anda bisa menambahkan a
style
to headsumber
Ada banyak jawaban di sini tetapi tidak ada jawaban yang membantu memanipulasi css dari
:before
atau:after
, bahkan yang tidak diterima.Inilah cara saya mengusulkan untuk melakukannya. Mari kita anggap HTML Anda seperti ini:
Dan kemudian Anda mengatur: sebelum di CSS dan mendesainnya seperti:
Harap perhatikan bahwa saya juga mengatur
content
atribut pada elemen itu sendiri sehingga Anda dapat menghapusnya nanti. Sekarang adabutton
klik di mana, Anda ingin mengubah warna: sebelum menjadi hijau dan ukuran font-nya menjadi 30px. Anda dapat mencapainya sebagai berikut:Tentukan css dengan gaya yang Anda butuhkan di beberapa kelas
.activeS
:Sekarang Anda dapat mengubah: sebelum gaya dengan menambahkan kelas ke elemen Anda: sebelum sebagai berikut:
Jika Anda hanya ingin mendapatkan konten
:before
, itu bisa dilakukan sebagai:Pada akhirnya, jika Anda ingin mengubah
:before
konten secara dinamis dengan jQuery, Anda dapat mencapainya sebagai berikut:Mengklik tombol "changeBefore" di atas akan mengubah
:before
konten#something
menjadi '22' yang merupakan nilai dinamis.Saya harap ini membantu
sumber
Saya memanfaatkan variabel yang didefinisikan di
:root
dalamCSS
untuk memodifikasi elemen pseudo:after
(yang sama berlaku untuk:before
) , khususnya untuk mengubah nilai untuk gaya yang ditentukan oleh dan nilai untuk yang lain ( ) dalam demo berikut yang menghasilkan warna acak dengan menggunakan JavaScript / jQuery:background-color
anchor
.sliding-middle-out:hover:after
content
anchor
#reference
HTML
CSS
JS / jQuery
sumber
attr()
kecuali dalamcontent
, sangat langka. Anda dapat memeriksa caniuse.com untuk itu.:root
dan dukungan css-variable lebih baik, tetapi penyebarannya masih belum begitu luas karena dukungan untuk itu cukup baru. (juga periksa dukungan untuk itu di caniuse.com)Saya telah membuat plugin jQuery untuk menambahkan aturan css-pseudo seperti menggunakan
.css()
elemen tertentu.pemakaian:
sumber
sumber
Anda dapat menggunakan plugin saya untuk tujuan ini.
JQuery:
Nilai harus ditentukan, seperti pada fungsi normal jQuery.css
Selain itu, Anda juga bisa mendapatkan nilai parameter elemen semu, seperti pada fungsi normal jQuery.css:
JS:
Tampilkan cuplikan kode
GitHub: https://github.com/yuri-spivak/managing-the-properties-of-pseudo-elements/
sumber
Orang lain berkomentar menambahkan elemen kepala dengan elemen gaya penuh dan itu tidak buruk jika Anda hanya melakukannya sekali tetapi jika Anda perlu mengatur ulang lebih dari sekali Anda akan berakhir dengan satu ton elemen gaya. Jadi untuk mencegah hal itu saya membuat elemen style kosong di kepala dengan id dan ganti innerHTML seperti ini:
Maka JavaScript akan terlihat seperti ini:
Sekarang dalam kasus saya, saya perlu ini untuk mengatur ketinggian elemen sebelum berdasarkan ketinggian yang lain dan itu akan berubah pada mengubah ukuran sehingga menggunakan ini saya dapat menjalankan
setHeight()
setiap kali jendela diubah ukurannya dan itu akan menggantikan dengan<style>
benar.Harapan itu membantu seseorang yang terjebak berusaha melakukan hal yang sama.
sumber
Saya memiliki sesuatu yang berbeda untuk Anda yang mudah dan efektif.
sumber