Динамічно змінюється атрибут стилю елементів за допомогою JavaScript


117

Я маю певну таблицю стилів для діва. Тепер я хочу змінити один атрибут div динамічно за допомогою js.

Як я можу це зробити?

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

Це правильно?

Відповіді:


123

Це майже правильно.

Оскільки -оператор javascript, то в іменах властивостей його реально не можна. Якщо ви налаштовували borderабо щось замість цього однозначне, ваш код спрацював би чудово.

Однак, що вам потрібно пам’ятати padding-top, а також будь-яке ім'я атрибута через дефіс - це те, що в JavaScript ви видаляєте дефіс і робите наступну велику літеру, тому у вашому випадку це буде paddingTop.

Є деякі інші винятки. У JavaScript є кілька зарезервованих слів, тому ви не можете встановити floatце, наприклад. Натомість у деяких браузерах потрібно використовувати, cssFloatа в інших styleFloat. Саме для таких розбіжностей рекомендується використовувати таку структуру, як jQuery, яка обробляє несумісність браузера для вас ...


213

На додаток до інших відповідей, якщо ви хочете використовувати тире з тиском для властивостей стилю, ви також можете використовувати:

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. І іноді цього не хочеш.
Gustavo Straube


15

Припустимо, у вас такий HTML:

<div id='thediv'></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.
Gustavo Straube

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
Мінус цього способу полягає в тому, що ви видаляєте будь-який інший стиль вбудованої форми. Це тому, що ви замінюєте все значення атрибута. Напевно, отримання поточного стилю, перевірка наявності наявного значення для властивості, яку ви хочете встановити, а потім додавання / заміна потрібним значенням - краще рішення.
Густав Страубе

Домовились. Але ОП потребувало рішення, наближеного до того, що він уже робив, а не врахування вашого випадку використання. Це один із найпростіших способів досягти цього, але це, безумовно, не найкращий.
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.