Динамическое изменение атрибута стиля элемента с помощью JavaScript


117

У меня есть определенная таблица стилей для div. Теперь я хочу динамически изменить один атрибут div с помощью js.

Как мне это сделать?

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

Это верно?

Ответы:


124

Это почти правильно.

Поскольку -это оператор javascript, вы не можете использовать его в именах свойств. Если бы вы настраивали borderили что-то подобное, ваш код работал бы нормально.

Однако вам нужно помнить о том padding-top, что и для любого имени атрибута, написанного через дефис, это то, что в javascript вы удаляете дефис и делаете следующую букву в верхнем регистре, так что в вашем случае это будет paddingTop.

Есть и другие исключения. В JavaScript есть зарезервированные слова, поэтому, например, вы не можете их установить float. Вместо этого в одних браузерах нужно использовать, cssFloatа в других styleFloat. Именно для таких расхождений рекомендуется использовать фреймворк, такой как jQuery, который обрабатывает несовместимости браузеров за вас ...


214

В дополнение к другим ответам, если вы хотите использовать обозначение тире для свойств стиля, вы также можете использовать:

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

3
Я тоже, это действительно полезно для динамических функций, можно передать стиль как строковое значение, а затем установить стиль и значение. Отличное решение.
raphie

1
Кроме того, добавив к тому, что говорит @raphie, вы также можете использовать document.getElementById("xyz").style["paddingTop"] = '10px'.
Зубная щетка

1
@anunkjn: ты прав. Я бы сказал , что это не работает больше в FF. Что, ну ... странно.
KooiInc

17

Подобную проблему я решаю с помощью:

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

Надеюсь, это поможет.


2
Минус этого способа заключается в том, что вы устанавливаете отступ для других сторон 0. А иногда этого не хочется.
Густаво Штраубе


15

Предполагая, что у вас есть такой HTML:

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

Если вы хотите изменить атрибут стиля этого div, вы должны использовать

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

Замените [ATTRIBUTE]нужным атрибутом стиля. Не забудьте удалить '-' и сделать следующую букву заглавной.

Примеры

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

1
Как указано в принятом ответе, есть некоторые исключения. Нравится float.
Густаво Штраубе

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

будет

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

7

Я бы рекомендовал использовать функцию, которая принимает идентификатор элемента и объект, содержащий свойства CSS, чтобы справиться с этим. Таким образом, вы пишете несколько стилей одновременно и используете стандартный синтаксис свойств 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'});

Еще лучше вы можете хранить стили в переменной, что значительно упростит управление собственностью, например

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

надеюсь, это поможет


7

Удивлен, что я не увидел нижеприведенное решение для выбора способа выбора запроса ,

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

Решения CSSStyleDeclaration , пример принятого ответа

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

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

также сделает свою работу.


5
Обратной стороной этого способа является то, что вы удаляете любой другой встроенный стиль. Это потому, что вы заменяете все значение атрибута. Я предполагаю, что получение текущего стиля, проверка существующего значения для свойства, которое вы хотите установить, а затем добавление / замена на желаемое значение - лучшее решение.
Густаво Штраубе

Согласовано. Но OP нуждался в решении, более близком к тому, что он уже делал, без учета вашего варианта использования. Это один из самых простых способов добиться этого, но, безусловно, не лучший.
Pinkesh Badjatiya

@GustavoStraube, я бы не назвал это недостатком. Во многих случаях это именно то, что хочет сделать разработчик - т.е. перезаписать стиль элемента. Я бы назвал это следствием такого поведения.
stwr667,

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

работает для меня

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.