Dynamiczna zmiana atrybutu stylu elementu za pomocą JavaScript


117

Mam określony arkusz stylów dla div. Teraz chcę dynamicznie zmodyfikować jeden atrybut div za pomocą js.

Jak mogę to zrobić?

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

Czy to jest poprawne?

Odpowiedzi:


123

Prawie się zgadza.

Ponieważ -jest operatorem javascript, tak naprawdę nie można go mieć w nazwach właściwości. Gdybyś ustawił borderlub zamiast tego coś takiego jednowyrazowego, twój kod działałby dobrze.

Jednak rzeczą, o której musisz pamiętać padding-top, i dla każdej nazwy atrybutu z łącznikiem, jest to, że w javascript usuwasz łącznik i tworzysz następną literę wielką, więc w twoim przypadku tak będzie paddingTop.

Jest kilka innych wyjątków. JavaScript ma kilka zarezerwowanych słów, więc floatna przykład nie możesz ich tak ustawić . Zamiast tego w niektórych przeglądarkach musisz używać, cssFloataw innych styleFloat. W przypadku takich rozbieżności zaleca się użycie struktury takiej jak jQuery, która obsługuje niezgodności przeglądarek za Ciebie ...


213

Oprócz innych odpowiedzi, jeśli chcesz użyć notacji myślnika we właściwościach stylu, możesz również użyć:

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

3
Ja też nie, jest to naprawdę przydatne w przypadku funkcji dynamicznych, można przekazać styl jako wartość ciągu, a następnie ustawić styl i wartość. Świetne rozwiązanie.
raphie

1
Dodatkowo, dodając do tego, co mówi @raphie, możesz również użyć document.getElementById("xyz").style["paddingTop"] = '10px'.
Szczoteczka do zębów

1
@anunkjn: masz rację. Powiedziałbym, że nie działa już w FF. Co jest ... cóż ... dziwne.
KooiInc,

17

Podobny problem rozwiązuję z:

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

Mam nadzieję, że to pomoże.


2
Wadą tego sposobu jest ustawienie dopełnienia dla innych stron 0. Czasami tego nie chcesz.
Gustavo Straube


15

Zakładając, że masz taki HTML:

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

Jeśli chcesz zmodyfikować atrybut stylu tego elementu div, użyj

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

Zastąp [ATTRIBUTE]żądanym atrybutem stylu. Pamiętaj, aby usunąć znak „-” i uczynić następującą literę wielką literą.

Przykłady

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

1
Jak stwierdzono w przyjętej odpowiedzi, są pewne wyjątki. Lubię float.
Gustavo Straube

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

będzie

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

7

Zalecałbym użycie funkcji, która akceptuje identyfikator elementu i obiekt zawierający właściwości CSS, aby sobie z tym poradzić. W ten sposób piszesz wiele stylów na raz i używasz standardowej składni właściwości CSS.

//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'});

Jeszcze lepiej byłoby przechowywać style w zmiennej, co znacznie ułatwi zarządzanie nieruchomością np

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

Mam nadzieję, że to pomoże


7

Zaskoczony , że nie widziałem poniższego rozwiązania selektora zapytań ,

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

Rozwiązania CSSStyleDeclaration , przykład przyjętej odpowiedzi

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

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

również wykonałby swoją pracę.


5
Wadą takiego sposobu jest usunięcie wszelkich innych stylów wbudowanych. Dzieje się tak, ponieważ zastępujesz całą wartość atrybutu. Wydaje mi się, że lepszym rozwiązaniem jest uzyskanie aktualnego stylu, sprawdzenie istniejącej wartości właściwości, którą chcesz ustawić, a następnie dodanie / zastąpienie żądaną wartością.
Gustavo Straube

Zgoda. Ale OP potrzebował rozwiązania bliższego temu, co już robił, które nie brało pod uwagę twojego przypadku użycia. To jeden z najprostszych sposobów osiągnięcia tego celu, ale z pewnością nie jest najlepszy.
Pinkesh Badjatiya

@GustavoStraube, nie nazwałbym tego wadą. W wielu przypadkach właśnie to chce zrobić programista - tj. Nadpisać styl elementu. Nazwałbym to konsekwencją zrobienia tego w ten sposób.
stwr667

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

pracuje dla mnie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.