Saya mengalami kesulitan menerapkan gaya itu !important
. Saya sudah mencoba:
$("#elem").css("width", "100px !important");
Ini tidak melakukan apa - apa ; tidak ada gaya lebar yang diterapkan. Apakah ada cara jQuery-ish menerapkan gaya seperti itu tanpa harus menimpa cssText
(yang berarti saya harus menguraikannya terlebih dahulu, dll)?
Sunting : Saya harus menambahkan bahwa saya memiliki stylesheet dengan !important
gaya yang saya coba timpa dengan !important
style inline, jadi menggunakan .width()
dan sejenisnya tidak berfungsi karena akan ditimpa oleh !important
gaya eksternal saya .
Juga, nilai yang akan menggantikan nilai sebelumnya dihitung , jadi saya tidak bisa begitu saja membuat gaya eksternal lain.
javascript
jquery
html
css
mkoryak
sumber
sumber
.css
dan!important
dalam inti jQuery. Bug ditutup sebagai "tidak akan diperbaiki". Namun, uji kasus bug itu tidak seketat yang ada dalam pertanyaan ini - kasus uji tidak memiliki!important
gaya inline yang coba ditimpa. Dengan demikian, solusi yang diusulkan dalam bug itu tidak akan berfungsi dalam kasus ini.Jawaban:
Masalahnya disebabkan oleh jQuery tidak memahami
!important
atribut, dan karena itu gagal menerapkan aturan.Anda mungkin dapat mengatasi masalah itu, dan menerapkan aturan dengan merujuknya, melalui
addClass()
:Atau dengan menggunakan
attr()
:Pendekatan yang terakhir akan menghapus semua aturan gaya in-line yang ditetapkan sebelumnya. Jadi gunakan dengan hati-hati.
Tentu saja, ada argumen bagus bahwa metode @Nick Craver lebih mudah / lebih bijaksana.
Di atas,
attr()
pendekatan dimodifikasi sedikit untuk mempertahankanstyle
string / properti asli, dan dimodifikasi seperti yang disarankan oleh falko dalam komentar:sumber
'undefinedwidth: 100px !important;'
ketika gaya saat ini kosong.Saya pikir saya telah menemukan solusi nyata. Saya telah membuatnya menjadi fungsi baru:
jQuery.style(name, value, priority);
Anda dapat menggunakannya untuk mendapatkan nilai
.style('name')
seperti.css('name')
, dapatkan CSSStyleDeclaration dengan.style()
, dan juga menetapkan nilai - dengan kemampuan untuk menentukan prioritas sebagai 'penting'. Lihat ini .Demo
Inilah hasilnya:
Fungsinya
Lihat ini untuk contoh cara membaca dan mengatur nilai CSS. Masalah saya adalah bahwa saya sudah menetapkan
!important
lebar pada CSS saya untuk menghindari konflik dengan CSS tema lainnya, tetapi setiap perubahan yang saya buat pada lebar dalam jQuery tidak akan terpengaruh karena mereka akan ditambahkan ke atribut style.Kesesuaian
Untuk pengaturan dengan prioritas menggunakan
setProperty
fungsi, Artikel ini mengatakan ada dukungan untuk IE 9+ dan semua browser lainnya. Saya telah mencoba dengan IE 8 dan gagal, itulah sebabnya saya membangun dukungan untuk itu dalam fungsi saya (lihat di atas). Ini akan bekerja pada semua browser lain menggunakan setProperty, tetapi akan membutuhkan kode khusus saya untuk bekerja di <IE 9.sumber
!important
gaya Anda, setidaknya untuk hal-hal yang akan Anda ubah dengan jQuery ... Selama itu adalah gaya Anda . Jika kode Anda berjalan di dalam halaman yang dikodekan oleh seorang siswa yang mengatasi ketidaktahuannya akan aturan spesifik dengan menampar!important
setiap gaya kedua, Anda akan langsung masuk ke salah satu dari ini!importants
cepat atau lambat.Anda dapat mengatur lebar langsung menggunakan
.width()
seperti ini:Diperbarui untuk komentar: Anda memiliki opsi ini juga, tetapi itu akan mengganti semua css pada elemen, jadi tidak yakin itu lebih layak:
sumber
$('#elem').css('cssText', $('#elem').css('cssText')+'width: 100px !important');
konat dengan nilai sebelumnyaCatatan: Menggunakan Chrome dapat mengembalikan kesalahan seperti:
Mengubah jalur untuk menggunakan
.removeProperty
fungsi seperti untukelem[0].style.removeProperty('width');
memperbaiki masalah.sumber
var = document.getElementById('elem');
dan lakukan metode gaya pada elem (bukan elem [0]). Bersulang.var style = document.getElementById('elem'); style.removeProperty('width'); style.setProperty('width, '100px', 'important')
.removeAttribute
. Tampaknya menjadi metode IE-only . @mcoenca komentar benar;.removeProperty
bekerja dengan baik. Ini IE9 + menurut MSDNelem.next().get(0).style...
Jawaban David Thomas menjelaskan cara menggunakan
$('#elem').attr('style', …)
, tetapi memperingatkan bahwa menggunakannya akan menghapus gaya yang sebelumnya ditetapkan dalamstyle
atribut. Inilah cara penggunaanattr()
tanpa masalah itu:Sebagai fungsi:
Berikut ini adalah demo JS Bin .
sumber
addStyleAttribute()
juga dapat dimodifikasi untuk mengambil parameter yang sama dengan jQuery.css()
. Misalnya, ini dapat mendukung pengambilan peta properti CSS ke nilainya. Jika Anda melakukannya, pada dasarnya Anda akan menerapkan kembali.css()
dengan!important
bug diperbaiki tetapi tanpa optimasi.Setelah membaca jawaban lain dan bereksperimen, inilah yang berhasil bagi saya:
Ini tidak bekerja di IE 8 dan di bawahnya.
sumber
Kamu bisa melakukan ini:
Menggunakan "cssText" sebagai nama properti dan apa pun yang Anda ingin tambahkan ke CSS sebagai nilainya.
sumber
cssText
yang ada di sana sebelumnya - jadi Anda benar-benar tidak dapat menggunakannya secara bebasAnda dapat mencapai ini dalam dua cara:
sumber
.prop()
fungsi itu ditambahkan di jQuery v1.6 dan akan berfungsi di Chrome ... ini dikutip dari halaman prop: Sebelum jQuery 1.6,.attr()
metode ini terkadang memperhitungkan nilai properti ketika mengambil beberapa atribut, yang dapat menyebabkan perilaku tidak konsisten. Pada jQuery 1.6,.prop()
metode ini menyediakan cara untuk secara eksplisit mengambil nilai properti, sambil.attr()
mengambil atribut.Tidak perlu pergi ke kompleksitas jawaban @ AramKocharyan, atau kebutuhan untuk memasukkan tag gaya apa pun secara dinamis.
Gaya hanya ditimpa, tetapi Anda tidak perlu mengurai apa pun, mengapa Anda?
Tidak dapat digunakan
removeProperty()
, karena tidak akan menghapus!important
aturan di Chrome.Tidak dapat digunakan
element.style[property] = ''
, karena hanya menerima camelCase di Firefox.Anda mungkin bisa membuat ini lebih pendek dengan jQuery, tetapi fungsi vanilla ini akan berjalan di browser modern, Internet Explorer 8, dll.
sumber
Inilah yang saya lakukan setelah menghadapi masalah ini ...
sumber
Solusi ini tidak mengesampingkan salah satu gaya sebelumnya, hanya berlaku yang Anda butuhkan:
sumber
Jika tidak begitu relevan dan karena Anda berurusan dengan satu elemen
#elem
, Anda dapat mengubah id-nya menjadi sesuatu yang lain dan menatanya sesuai keinginan ...Dan di CSS Anda:
sumber
Alih-alih menggunakan
css()
fungsi cobaaddClass()
fungsi:sumber
Solusi termudah dan terbaik untuk masalah ini dari saya adalah cukup menggunakan addClass () daripada .css () atau .attr ().
Sebagai contoh:
$('#elem').addClass('importantClass');
Dan di file CSS Anda:
sumber
FYI, itu tidak berfungsi karena jQuery tidak mendukungnya. Ada tiket yang diajukan pada 2012 ( # 11173 $ (elem) .css ("properti", "nilai! Penting") gagal ) yang akhirnya ditutup sebagai WONTFIX.
sumber
Sebagian besar jawaban ini sekarang sudah usang, dukungan IE7 tidak menjadi masalah.
Cara terbaik untuk melakukan ini yang mendukung IE11 + dan semua browser modern adalah:
Atau jika Anda mau, Anda bisa membuat plugin jQuery kecil yang melakukan ini. Plugin ini sangat cocok dengan
css()
metode jQuery sendiri dalam parameter yang didukungnya:Contoh jsfiddle di sini .
sumber
Pertama-tama kita harus menghapus gaya sebelumnya. Saya menghapusnya menggunakan ekspresi reguler. Berikut adalah contoh untuk mengubah warna:
sumber
$selector.css('cssText','margin-bottom: 0 !important')
Cara alternatif untuk menambahkan gaya di kepala:
Ini menambahkan gaya setelah semua file CSS Anda sehingga akan memiliki prioritas lebih tinggi daripada file CSS lainnya dan akan diterapkan.
sumber
Mungkin terlihat seperti ini:
Cache
Setel CSS
Hapus CSS
sumber
Saya pikir ini berfungsi OK dan dapat menimpa CSS lain sebelumnya (ini: elemen DOM):
sumber
Lakukan seperti ini:
sumber
Solusi ini akan meninggalkan semua javascript yang dikomputasi dan menambahkan tag penting ke dalam elemen: Anda dapat melakukannya (Mis jika Anda perlu mengatur lebar dengan tag penting)
sumber
Tiga contoh kerja
Saya memiliki situasi yang sama, tetapi saya menggunakan .find () setelah berjuang dengan .closest () untuk waktu yang lama dengan banyak variasi.
Kode Contoh
Alternatif
Bekerja: http://jsfiddle.net/fx4mbp6c/
sumber
.indexOf()
fungsi dengan sesuatu yang lebih kompatibel lintas-browser. Gunakan, lebih tepatnya,.match()
atau.test()
bukannya.indexOf()
var contents =
?Ini mungkin atau mungkin tidak sesuai untuk situasi Anda, tetapi Anda dapat menggunakan penyeleksi CSS untuk banyak jenis situasi ini.
Misalnya, jika Anda ingin instance ke-3 dan ke-6 dari .cssText memiliki lebar yang berbeda, Anda dapat menulis:
Atau:
sumber
.cssText
.:nth-of-type()
tidak melakukan apa yang Anda pikirkan. Lihat di sini untuk penjelasan.li
elemen. Mereka semua dari jenis elemen yang samali
, yang merupakan apa yang berurusan dengan pemilih. Jika Anda mencampur elemen yang berbeda di induk yang sama, maka:nth-of-type()
akan berperilaku berbeda, terutama jadi setelah Anda menambahkan pemilih kelas ke dalam campuran.Saya akan menganggap Anda mencobanya tanpa menambahkan
!important
?CSS sebaris (yang merupakan cara JavaScript menambahkan gaya) menimpa CSS stylesheet. Saya cukup yakin itulah masalahnya bahkan ketika aturan CSS stylesheet telah
!important
.Pertanyaan lain (mungkin pertanyaan bodoh tetapi harus ditanyakan.): Apakah elemen yang Anda coba kerjakan
display:block;
ataudisplay:inline-block;
?Tidak mengetahui keahlian Anda dalam CSS ... elemen sebaris tidak selalu berperilaku seperti yang Anda harapkan.
sumber
Kita dapat menggunakan setProperty atau cssText untuk menambahkan
!important
ke elemen DOM menggunakan JavaScript.Contoh 1:
Contoh 2:
sumber
Saya juga menemukan bahwa elemen atau add-on tertentu (seperti Bootstrap) memiliki beberapa case kelas khusus di mana mereka tidak bermain dengan baik
!important
atau work-arounds seperti.addClass/.removeClass
, dan dengan demikian Anda harus mengaktifkan / mematikannya.Misalnya, jika Anda menggunakan sesuatu seperti
<table class="table-hover">
satu-satunya cara untuk berhasil memodifikasi elemen seperti warna baris adalah dengan mengaktifkantable-hover
/ menonaktifkan kelas, seperti ini$(your_element).closest("table").toggleClass("table-hover");
Semoga perbaikan ini bermanfaat bagi seseorang! :)
sumber
Saya memiliki masalah yang sama ketika mencoba mengubah warna teks dari menu-item ketika "event". Cara terbaik yang saya temukan ketika saya memiliki masalah yang sama adalah:
Langkah pertama: Buat, di CSS Anda, kelas baru dengan tujuan ini, misalnya:
Langkah terakhir: Terapkan kelas ini menggunakan metode addClass sebagai berikut:
Masalah terpecahkan.
sumber
Solusi teraman untuk ini adalah menambahkan kelas dan kemudian melakukan keajaiban dalam CSS :-),
addClass()
danremoveClass()
harus melakukan pekerjaan.sumber
https://jsfiddle.net/xk6Ut/256/
Pendekatan alternatif secara dinamis membuat dan memperbarui kelas CSS dalam JavaScript. Untuk melakukan itu, kita bisa menggunakan elemen style dan perlu menggunakan ID untuk elemen style sehingga kita bisa memperbarui kelas CSS
...
sumber