JavaScript kullanarak öğe stili niteliğini dinamik olarak değiştirme


117

Bir div için belirli bir stil sayfam var. Şimdi js kullanarak bir div niteliğini dinamik olarak değiştirmek istiyorum.

Nasıl yapabilirim?

document.getElementById("xyz").style.padding-top = "10px";

Bu doğru mu?

Yanıtlar:


123

Neredeyse doğru.

Yana -bir javascript operatörüdür, gerçekten mülkiyet adlarında buna sahip olamaz. Ayar yapıyorsanız borderveya bunun yerine tek kelimeyle yazılmış bir şey olsaydı, kodunuz gayet iyi çalışırdı.

Bununla birlikte, padding-topve herhangi bir tireli öznitelik adı için hatırlamanız gereken şey , javascript'te kısa çizgiyi kaldırmanız ve sonraki harfi büyük harf yapmanızdır, yani sizin durumunuzda böyle olacaktır paddingTop.

Başka istisnalar da var. JavaScript'in bazı ayrılmış kelimeleri vardır, bu nedenle floatörneğin böyle ayarlayamazsınız . Bunun yerine, bazı tarayıcılarda size kullanımına ihtiyaç cssFloatve diğerlerinde styleFloat. Bunun gibi tutarsızlıklar için, sizin için tarayıcı uyumsuzluklarını ele alan jQuery gibi bir çerçeve kullanmanız önerilir ...


213

Diğer yanıtlara ek olarak, stil özellikleri için kısa çizgi notition kullanmak isterseniz şunları da kullanabilirsiniz:

document.getElementById("xyz").style["padding-top"] = "10px";

3
Ben de, bu dinamik işlevler için gerçekten kullanışlıdır, stili bir dizge değeri olarak geçirebilir, ardından stili ve değeri ayarlayabilirsiniz. Harika çözüm.
raphie

1
Ayrıca @raphie'nin söylediği şeye ekleyerek de kullanabilirsiniz document.getElementById("xyz").style["paddingTop"] = '10px'.
Diş Fırçası

1
@anunkjn: haklısın. FF'de artık çalışmadığını söyleyebilirim . Bu da ... tuhaf.
KooiInc

17

Benzer sorunu şununla çözüyorum:

document.getElementById("xyz").style.padding = "10px 0 0 0";

Umarım yardımcı olur.


2
Bu şekilde yapmanın eksisi, diğer taraflar için dolgu ayarını almanızdır 0. Ve bazen bunu istemezsin.
Gustavo Straube


15

Bunun gibi bir HTML'ye sahip olduğunuzu varsayarsak:

<div id='thediv'></div>

Bu div öğesinin stil özniteliğini değiştirmek isterseniz,

document.getElementById('thediv').style.[ATTRIBUTE] = '[VALUE]'

[ATTRIBUTE]İstediğiniz stil niteliğiyle değiştirin . '-' harfini kaldırmayı ve aşağıdaki harfi büyük yapmayı unutmayın.

Örnekler

document.getElementById('thediv').style.display = 'none'; //changes the display
document.getElementById('thediv').style.paddingLeft = 'none'; //removes padding

1
Kabul edilen cevapta belirtildiği gibi, bazı istisnalar vardır. Beğen float.
Gustavo Straube

8
document.getElementById("xyz").style.padding-top = '10px';

olacak

document.getElementById("xyz").style["paddingTop"] = '10px';

7

Bunu işlemek için öğe kimliğini ve CSS özelliklerini içeren bir nesneyi kabul eden bir işlev kullanmanızı tavsiye ederim. Bu şekilde, aynı anda birden çok stil yazarsınız ve standart CSS özellik sözdizimini kullanırsınız.

//function to handle multiple styles
function setStyle(elId, propertyObject) {
    var el = document.getElementById(elId);
    for (var property in propertyObject) {
        el.style[property] = propertyObject[property];
    }
}

setStyle('xyz', {'padding-top': '10px'});

Daha da iyisi, stilleri bir değişkende saklayabilirsiniz, bu da mülk yönetimini çok daha kolay hale getirir, örn.

var xyzStyles = {'padding-top':'10px'}
setStyle('xyz', xyzStyles);

umarım yardımcı olur


7

Sürpriz aşağıda görmediğini sorgu seçici yolu çözümü,

document.querySelector('#xyz').style.paddingTop = "10px"

CSSStyleDeclaration çözümleri, kabul edilen cevaba bir örnek

document.getElementById('xyz').style.paddingTop = "10px";

5
document.getElementById("xyz").setAttribute('style','padding-top:10px');

işi de yapacaktı.


5
Bu şekilde yapmanın dezavantajı, başka herhangi bir satır içi stili kaldırmanızdır. Bunun nedeni, tüm özellik değerini değiştiriyor olmanızdır. Sanırım mevcut stili elde etmek, ayarlamak istediğiniz mülk için mevcut bir değeri kontrol etmek ve ardından istenen değerle eklemek / değiştirmek daha iyi bir çözüm.
Gustavo Straube

Kabul. Ancak OP'nin halihazırda yapmakta olduğu şeye daha yakın bir çözüme ihtiyacı vardı, bu da sizin kullanım durumunuzu hesaba katmıyordu. Bu, bunu başarmanın en basit yollarından biridir, ancak kesinlikle en iyisi değildir.
Pinkesh Badjatiya

@GustavoStraube, buna bir dezavantaj demezdim. Çoğu durumda bu, geliştiricinin tam olarak yapmak istediği şeydir - yani öğenin stilinin üzerine yazın. Ben bunu bu şekilde yapmanın bir sonucu olarak adlandırırım.
stwr667

5
document.getElementById('id').style = 'left: 55%; z-index: 999; overflow: hidden; width: 0px; height: 0px; opacity: 0; display: none;';

benim için çalışıyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.