Sangat mudah untuk mengatur nilai CSS sebaris dengan javascript. Jika saya ingin mengubah lebarnya dan saya memiliki html seperti ini:
<div style="width: 10px"></div>
Yang perlu saya lakukan adalah:
document.getElementById('id').style.width = value;
Ini akan mengubah nilai lembar gaya sebaris. Biasanya ini bukan masalah, karena gaya sebaris mengganti lembar gaya. Contoh:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId"></div>
Menggunakan Javascript ini:
document.getElementById('tId').style.width = "30%";
Saya mendapatkan yang berikut:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId" style="width: 30%";></div>
Ini adalah masalah, karena saya tidak hanya ingin mengubah nilai sebaris, Jika saya mencari lebarnya sebelum saya mengaturnya, ketika saya memiliki:
<div id="tId"></div>
Nilai yang dikembalikan adalah Null, jadi jika saya memiliki Javascript yang perlu mengetahui lebar sesuatu untuk melakukan beberapa logika (saya menambah lebar sebesar 1%, bukan ke nilai tertentu), mendapatkan kembali Null ketika saya mengharapkan string "50% "tidak benar-benar berfungsi.
Jadi pertanyaan saya: Saya memiliki nilai dalam gaya CSS yang tidak terletak sebaris, bagaimana saya bisa mendapatkan nilai ini? Bagaimana saya bisa mengubah gaya daripada nilai inline, diberi id?
Jawaban:
Oke, sepertinya Anda ingin mengubah CSS global sehingga secara efektif akan mengubah semua elemen gaya petikular sekaligus. Saya baru-baru ini belajar bagaimana melakukan ini sendiri dari tutorial Shawn Olson . Anda dapat langsung merujuk kodenya di sini .
Berikut ringkasannya:
Anda dapat mengambil stylesheet melalui
document.styleSheets
. Ini sebenarnya akan mengembalikan array dari semua stylesheet di halaman Anda, tetapi Anda dapat mengetahui yang mana Anda berada melaluidocument.styleSheets[styleIndex].href
properti. Setelah Anda menemukan lembar gaya yang ingin Anda edit, Anda perlu mendapatkan serangkaian aturan. Ini disebut "aturan" di IE dan "cssRules" di sebagian besar browser lain. Cara untuk mengetahui CSSRule tempat Anda berada adalah denganselectorText
properti. Kode yang berfungsi terlihat seperti ini:Beri tahu saya cara kerjanya untuk ya, dan beri komentar jika Anda melihat ada kesalahan.
sumber
rule.value
di FF 20.rule.style
Namun ada, yang dapat diatur dan berperilaku sepertielement.style
. Cf. https://developer.mozilla.org/en-US/docs/DOM/CSSStyleRule . Memeriksarule.type == rule.STYLE_RULE
mungkin juga merupakan ide bagus sebelum mengaksesrule.selectorText
.document.styleSheets[styleIndex].cssRules.[ruleIndex].style = {'color':'red', 'background-color':'green'};
bekerja untuk saya, terima kasih!Silahkan! Tanya saja w3 ( http://www.quirksmode.org/dom/w3c_css.html )! Atau sebenarnya, butuh waktu lima jam ... tapi ini dia!
Fungsinya sangat mudah digunakan .. contoh:
Oh ..
EDIT: seperti yang dijelaskan @ user21820 dalam jawabannya, mungkin sedikit tidak perlu mengubah semua stylesheet pada halaman. Skrip berikut bekerja dengan IE5.5 serta Google Chrome terbaru, dan hanya menambahkan fungsi css () yang dijelaskan di atas.
sumber
Mengumpulkan kode di jawaban, saya menulis fungsi ini yang tampaknya berjalan dengan baik di FF 25 saya.
Ini adalah cara untuk meletakkan nilai di css yang akan digunakan di JS meskipun tidak dipahami oleh browser. misalnya maxHeight untuk tbody dalam tabel yang digulir.
Telepon:
CCSStylesheetRuleStyle('default', "#mydiv", "height");
CCSStylesheetRuleStyle('default', "#mydiv", "color", "#EEE");
sumber
document.styleSheets[m].href
akan menjadi null dan gagal.Saya tidak tahu mengapa solusi lain melewati seluruh daftar stylesheet untuk dokumen tersebut. Melakukan hal itu membuat entri baru di setiap stylesheet, yang tidak efisien. Sebagai gantinya, kita cukup menambahkan stylesheet baru dan cukup menambahkan aturan CSS yang kita inginkan di sana.
Perhatikan bahwa kita bisa mengganti bahkan gaya sebaris yang ditetapkan langsung pada elemen dengan menambahkan "! Important" ke nilai properti, kecuali sudah ada deklarasi gaya "! Important" yang lebih spesifik untuk properti itu.
sumber
Saya tidak memiliki perwakilan yang cukup untuk berkomentar, jadi saya akan memformat jawaban, namun ini hanya demonstrasi dari masalah yang dipermasalahkan.
Tampaknya, ketika gaya elemen didefinisikan dalam stylesheet, gaya tersebut tidak terlihat oleh getElementById ("someElement"). Style
Kode ini menggambarkan masalah ... Kode dari bawah di jsFiddle .
Di Tes 2, pada panggilan pertama, nilai item yang tersisa tidak ditentukan, jadi, apa yang seharusnya menjadi toggle sederhana menjadi kacau. Untuk penggunaan saya, saya akan mendefinisikan nilai gaya penting saya sebaris, tetapi tampaknya itu sebagian mengalahkan tujuan stylesheet.
Ini kode halamannya ...
Saya harap ini membantu menjelaskan masalah ini.
Melewatkan
sumber
Anda bisa mendapatkan gaya "dihitung" dari elemen apa pun.
IE menggunakan sesuatu yang disebut "currentStyle", Firefox (dan saya menganggap browser "standar yang sesuai" lainnya) menggunakan "defaultView.getComputedStyle".
Anda harus menulis fungsi browser silang untuk melakukan ini, atau menggunakan kerangka kerja Javascript yang bagus seperti prototipe atau jQuery (cari "getStyle" di file javascript prototipe, dan "curCss" di file javascript jquery).
Yang mengatakan jika Anda membutuhkan tinggi atau lebar Anda mungkin harus menggunakan element.offsetHeight dan element.offsetWidth.
Perhatikan, jika Anda menambahkan gaya sebaris ke elemen yang dipermasalahkan, gaya tersebut dapat bertindak sebagai nilai "default" dan akan dapat dibaca oleh Javascript saat pemuatan laman, karena ini adalah properti gaya sebaris elemen:
sumber
Inti 32 garis sederhana ini memungkinkan Anda mengidentifikasi lembar gaya tertentu dan mengubah gayanya dengan sangat mudah:
sumber
Saya belum pernah melihat penggunaan praktis ini, tetapi Anda mungkin harus mempertimbangkan stylesheet DOM . Namun, sejujurnya saya pikir itu berlebihan.
Jika Anda hanya ingin mendapatkan lebar dan tinggi elemen, terlepas dari mana dimensinya, cukup gunakan
element.offsetWidth
danelement.offsetHeight
.sumber
Mungkin coba ini:
sumber