Saya tidak yakin ini yang Anda inginkan. Anda ingin menimpanya, yang, sebagaimana telah ditunjukkan, mudah dilakukan oleh $('#element').css('display', 'inline').
Apa yang saya cari adalah solusi untuk HAPUS gaya inline sepenuhnya. Saya memerlukan ini untuk plugin yang saya tulis di mana saya harus sementara mengatur beberapa nilai CSS inline, tetapi ingin kemudian menghapusnya; Saya ingin stylesheet mengambil kembali kendali. Saya bisa melakukannya dengan menyimpan semua nilai aslinya dan kemudian meletakkannya kembali sejajar, tetapi solusi ini terasa jauh lebih bersih bagi saya.
Menyetel nilai properti style ke string kosong - misalnya $('#mydiv').css('color', '')- menghapus properti itu dari elemen jika sudah diterapkan secara langsung, baik dalam atribut gaya HTML, melalui .css()metode jQuery , atau melalui manipulasi DOM langsung dari properti style. Namun, itu tidak menghapus gaya yang telah diterapkan dengan aturan CSS di stylesheet atau <style>elemen.
@ximi - Terima kasih kawan. Saya sudah memikirkan hal ini, dan saya memutuskan bahwa ini bukan buang-buang waktu. Itu bisa diadopsi untuk memeriksa gaya inline, yang saat ini tidak ada dukungan untuk jQuery ( .css('property')memberi Anda nilai, tetapi tidak memberi tahu Anda apakah itu berasal dari gaya inline).
Joseph Silber
Saya sampai pada kesimpulan yang sama secara independen - string kosong tampaknya melakukan apa yang kita inginkan. Itu tidak secara resmi didokumentasikan dalam API, tetapi mudah-mudahan akan terus bekerja.
Jon z
@Jonz - Ini adalah resmi didokumentasikan (meskipun saya tidak tahu kapan itu ditambahkan, saya tidak ingat melihat di sana ketika saya awalnya diposting ini). Juga, saya tidak berpikir jQuery melakukan apa pun di sini. styleObjek asli tampaknya berperilaku dengan cara yang sama. Saya mengubah jawaban saya dengan informasi ini.
Joseph Silber
Apakah ini berfungsi dengan hal-hal seperti font-family, atau apakah - mengacaukan regex?
TMH
4
@ oh - Kenapa tidak Anda gunakan saja $('#element').css('display', '')?
Joseph Silber
158
.removeAttr("style") untuk menghilangkan seluruh tag gaya ...
.attr("style") untuk menguji nilai dan melihat apakah gaya inline ada ...
.attr("style",newValue) untuk mengaturnya ke sesuatu yang lain
Ini akan memengaruhi semua gaya inline, bukan hanya display.
SLaks
1
kedengarannya bagus, cobalah mencobanya dan beri tahu Anda, saya tidak pernah menggunakan gaya inline yang biasanya sangat senang untuk menghapus semua gaya inline
Haroldo
11
@Slaks yah, itulah yang saya maksudkan dengan "singkirkan seluruh tag gaya";)
heisenberg
Hai. apakah ada cara untuk memeriksa apakah beberapa 'gaya' telah diterapkan ke ... $ ('*'), dari sumber apa pun seperti gaya berjajar, menata atribut seperti font, b, kuat, file css .. sebelum mencoba untuk hapus / reset apa saja atau atur ulang semua foto dengan mudah?
Milche Patern
Karena menghapus setiap gaya sebaris secara individual tidak menghapus styleatribut (sekarang kosong) , ini masih layak dicatat
Brilliand
26
Cara termudah untuk menghapus gaya sebaris (dihasilkan oleh jQuery) adalah:
$(this).attr("style","");
Kode sebaris harus menghilang dan objek Anda harus menyesuaikan gaya yang telah ditentukan dalam file CSS Anda.
err, apa? Saya mungkin tidak mengerti sesuatu. Aku sedang berpikir tentang <div style="display:block;">, $('div').hide().
Kobi
3
@Kobi: hidemembahas satu kasus khusus untuk memodifikasi gaya inline. Jawaban ini membahas semua kasus. ( hide/showjuga memiliki batasan sebagai dua di mana dua nilai di-toggle. yaitu none-> block atau none-> inline.)
Joel
@ Joel: hideSaya showakan mengingat nilai lama displaydan mengembalikannya dengan benar.
SLaks
@ SLaks: Keren. Itu pasti telah ditambahkan baru-baru ini, karena saya ingat pernah mengalami masalah dengan itu sebelumnya.
Joel
12
Anda dapat membuat plugin jquery seperti ini:
jQuery.fn.removeInlineCss =(function(){var rootStyle = document.documentElement.style;var remover =
rootStyle.removeProperty // modern browser|| rootStyle.removeAttribute // old browser (ie 6-8)returnfunction removeInlineCss(properties){if(properties ==null)returnthis.removeAttr('style');
proporties = properties.split(/\s+/);returnthis.each(function(){for(var i =0; i < proporties.length ; i++)
remover.call(this.style, proporties[i]);});};})();
pemakaian
$(".foo").removeInlineCss();//remove all inline styles
$(".foo").removeInlineCss("display");//remove one inline style
$(".foo").removeInlineCss("color font-size font-weight");//remove several inline styles
Jawaban ini berisi trik satu-baris yang sangat rapi yang berguna bahkan tanpa jQuery dan yang mungkin tidak diketahui banyak pengguna — panggilan elem.style.removeProperty('margin-left')akan dihapus hanya margin-leftdari styleatribut (dan mengembalikan nilai properti itu). Untuk IE6-8 itu elem.style.removeAttribute().
craigpatik
9
Cara Malas (yang akan menyebabkan desainer masa depan mengutuk nama Anda dan membunuh Anda dalam tidur Anda):
#myelement {
display: none !important;}
Penafian: Saya tidak menganjurkan pendekatan ini, tapi itu pasti cara malas.
UPDATE:
Saya telah membuat biola interaktif untuk bermain-main dengan berbagai metode dan hasil mereka. Rupanya, tidak ada banyak perbedaan antara set to empty string, set to faux valuedan removeProperty(). Semuanya menghasilkan fallback yang sama - yang merupakan aturan CSS yang diberikan sebelumnya atau nilai default browser.
maka dari itu 'malas'! tidak dapat arsed untuk menemukan yang sedikit dari plugin itu!
Haroldo
4
Saya tidak tahu bagaimana Anda mendefinisikan malas, saya hanya menjawab bagaimana saya akan melakukannya. Masuk akal untuk memperbaiki masalah dari mana asalnya daripada menambal sesuatu di luar plugin. Saya melihat kekacauan saat melakukannya dengan cara itu.
Josh Stodola
Jalan yang mana? Jika Anda mengedit plugin, Anda mungkin mendapatkan masalah setelah memperbarui ke versi baru yang akan menimpa perubahan Anda dan mengacaukan tata letak. Siapa yang akan ingat dalam waktu setahun atau lebih ketika Anda membuat penyesuaian kecil di sana? Saya selalu berusaha mencari solusi selain memodifikasi kode sumber plugin
Jika kalian memilih sesuatu, silakan tinggalkan komentar.
He Nrik
1
Saya kira Anda punya downvotes karena Anda tidak menjawab pertanyaan yang diajukan : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". Meskipun teks Anda benar, kode Anda tidak menyelesaikan pertanyaan.
Hilang Pengkodean
Memecahkan masalah yang saya miliki. Tnx.
yodalr
0
$("#element").css({ display: "none" });
Pada awalnya saya mencoba untuk menghapus gaya inline di css, tetapi tidak berfungsi dan gaya seperti tampilan baru: tidak ada yang akan ditimpa. Tetapi dalam JQuery berfungsi seperti ini.
Saya memiliki masalah serupa dengan properti width. Saya tidak bisa menghapus! Penting dari kode, dan karena itu membutuhkan gaya ini pada template baru saya menambahkan ID (modalstyling) ke elemen dan kemudian saya menambahkan kode berikut ke template:
<scripttype="text/javascript">
$('#modalstyling').css('width','');//Removal of width !important
$('#modalstyling').width('75%');//Set custom width</script>
Jawaban:
Pembaruan: sementara solusi berikut berfungsi, ada metode yang jauh lebih mudah. Lihat di bawah.
Inilah yang saya buat, dan saya harap ini berguna - untuk Anda atau orang lain:
Ini akan menghapus gaya sebaris itu.
Saya tidak yakin ini yang Anda inginkan. Anda ingin menimpanya, yang, sebagaimana telah ditunjukkan, mudah dilakukan oleh
$('#element').css('display', 'inline')
.Apa yang saya cari adalah solusi untuk HAPUS gaya inline sepenuhnya. Saya memerlukan ini untuk plugin yang saya tulis di mana saya harus sementara mengatur beberapa nilai CSS inline, tetapi ingin kemudian menghapusnya; Saya ingin stylesheet mengambil kembali kendali. Saya bisa melakukannya dengan menyimpan semua nilai aslinya dan kemudian meletakkannya kembali sejajar, tetapi solusi ini terasa jauh lebih bersih bagi saya.
Ini dia dalam format plugin:
Jika Anda memasukkan plugin ini di halaman sebelum skrip Anda, Anda bisa menelepon
dan itu harus melakukan trik.
Pembaruan : Saya sekarang menyadari bahwa semua ini sia-sia. Anda cukup mengosongkannya:
dan secara otomatis akan dihapus untuk Anda.
Berikut kutipan dari dokumen :
Saya tidak berpikir jQuery melakukan sihir apa pun di sini; sepertinya
style
objek melakukan ini secara asli .sumber
.css('property')
memberi Anda nilai, tetapi tidak memberi tahu Anda apakah itu berasal dari gaya inline).style
Objek asli tampaknya berperilaku dengan cara yang sama. Saya mengubah jawaban saya dengan informasi ini.$('#element').css('display', '')
?.removeAttr("style")
untuk menghilangkan seluruh tag gaya ....attr("style")
untuk menguji nilai dan melihat apakah gaya inline ada ....attr("style",newValue)
untuk mengaturnya ke sesuatu yang lainsumber
display
.style
atribut (sekarang kosong) , ini masih layak dicatatCara termudah untuk menghapus gaya sebaris (dihasilkan oleh jQuery) adalah:
Kode sebaris harus menghilang dan objek Anda harus menyesuaikan gaya yang telah ditentukan dalam file CSS Anda.
Bekerja untukku!
sumber
Anda dapat mengatur gaya menggunakan
css
metode jQuery :sumber
<div style="display:block;">
,$('div').hide()
.hide
membahas satu kasus khusus untuk memodifikasi gaya inline. Jawaban ini membahas semua kasus. (hide/show
juga memiliki batasan sebagai dua di mana dua nilai di-toggle. yaitu none-> block atau none-> inline.)hide
Sayashow
akan mengingat nilai lamadisplay
dan mengembalikannya dengan benar.Anda dapat membuat plugin jquery seperti ini:
pemakaian
sumber
elem.style.removeProperty('margin-left')
akan dihapus hanyamargin-left
daristyle
atribut (dan mengembalikan nilai properti itu). Untuk IE6-8 ituelem.style.removeAttribute()
.Cara Malas (yang akan menyebabkan desainer masa depan mengutuk nama Anda dan membunuh Anda dalam tidur Anda):
Penafian: Saya tidak menganjurkan pendekatan ini, tapi itu pasti cara malas.
sumber
sumber
sumber
Jika Anda ingin menghapus properti dalam atribut style - tidak hanya mengaturnya ke hal lain - Anda menggunakan
removeProperty()
metode ini:UPDATE:
Saya telah membuat biola interaktif untuk bermain-main dengan berbagai metode dan hasil mereka. Rupanya, tidak ada banyak perbedaan antara
set to empty string
,set to faux value
danremoveProperty()
. Semuanya menghasilkan fallback yang sama - yang merupakan aturan CSS yang diberikan sebelumnya atau nilai default browser.sumber
Jika tampilan adalah satu-satunya parameter dari gaya Anda, Anda dapat menjalankan perintah ini untuk menghapus semua gaya:
Berarti jika elemen Anda terlihat seperti ini sebelumnya:
Sekarang elemen Anda akan terlihat seperti ini:
sumber
Inilah filter pemilih inlineStyle yang saya tulis yang dihubungkan ke jQuery.
Dalam kasus Anda, Anda dapat menggunakan ini seperti:
sumber
Ubah plugin untuk tidak lagi menerapkan gaya. Itu akan jauh lebih baik daripada menghapus gaya sesudahnya.
sumber
$el.css({ height : '', 'margin-top' : '' });
dll ...
Biarkan param 2 kosong!
sumber
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"
. Meskipun teks Anda benar, kode Anda tidak menyelesaikan pertanyaan.$("#element").css({ display: "none" });
Pada awalnya saya mencoba untuk menghapus gaya inline di css, tetapi tidak berfungsi dan gaya seperti tampilan baru: tidak ada yang akan ditimpa. Tetapi dalam JQuery berfungsi seperti ini.
sumber
Saya memiliki masalah serupa dengan properti width. Saya tidak bisa menghapus! Penting dari kode, dan karena itu membutuhkan gaya ini pada template baru saya menambahkan ID (modalstyling) ke elemen dan kemudian saya menambahkan kode berikut ke template:
sumber