#javascript #css
#javascript #css
Вопрос:
Похоже, что использование этой функции было бы более переносимым или надежным, потому что альтернативой является установка атрибута:
element.style.setProperty(styleproperty, valuestring);
element.setAttribute('style',styleproperty ': ' valuestring ';');
Второй метод также может показаться немного более неэффективным, хотя это вряд ли вызывает беспокойство.
Но, по крайней мере, в Chrome, стиль не обновляется на странице, если я не использую этот setAttribute
метод.
Причина, по которой это небольшая проблема, заключается в том, что у меня потенциально много разных отдельных свойств стиля, которые я хочу изменить независимо от других. Мне приходится выполнять много синтаксического анализа и обработки строк, если я не могу использовать setProperty
removeProperty
, и т.д. Я должен извлечь строку стиля, выполнить поиск в ней, изменить ее и установить обратно в via setAttribute
. Должно сработать, но мне это не нравится.
Есть ли причина для этого? Это ошибка? Я предполагаю, что setAttribute
это запускает что-то для браузера для выполнения повторного рендеринга. Каков подходящий способ принудительного обновления, который обычно удобен для браузера?
Комментарии:
1. Это все встроенные стили, которые вы хотите изменить? Эта страница в quirksmode может быть полезной.
Ответ №1:
style
Прямая установка атрибута имеет последствия, которые могут быть нежелательными: он уничтожит все существующие стили, установленные в атрибуте элемента style
, и setAttribute
нарушается в более старом IE (и режимах совместимости в более поздних IE). Гораздо безопаснее использовать свойство элемента style
напрямую, чтобы установить только то свойство стиля, которое вам нужно:
element.style[styleproperty] = valuestring;
Это немедленно обновит страницу во всех основных браузерах.
Одно предостережение: свойства стиля CSS (обычно с использованием тире, например, in background-color
) не сопоставляются точно со свойствами объекта элемента style
DOM (обычно случай верблюда, например, in backgroundColor
). Из этого правила также есть исключения.
Комментарии:
1. Хорошо, я, кажется, упустил из виду возможность сделать это таким образом. Если он обновит и отобразит, это решит мои проблемы!
2. @Steven: я гарантирую, что он повторно отобразит соответствующие фрагменты страницы. Если это не так, у вашего кода есть другие проблемы 🙂
3. Кто-нибудь знает, как установить значение «!важно»? Нужно переопределить чей-то эгоистичный код
4. @StuartDobson: используя
style.setProperty(name, val, important)
— 3-й аргумент. на самом деле является обязательным, если я прав.5. Мы теряем возможность устанавливать значение, если используем синтаксис element.style[stylePropery]