Встроенные значения CSS легко установить с помощью javascript. Если я хочу изменить ширину и у меня есть вот такой HTML:
<div style="width: 10px"></div>
Все, что мне нужно сделать, это:
document.getElementById('id').style.width = value;
Это изменит значения встроенной таблицы стилей. Обычно это не проблема, потому что встроенный стиль переопределяет таблицу стилей. Пример:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId"></div>
Используя этот Javascript:
document.getElementById('tId').style.width = "30%";
Получаю следующее:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId" style="width: 30%";></div>
Это проблема, потому что я не только не хочу изменять встроенные значения, если я ищу ширину перед ее установкой, когда у меня есть:
<div id="tId"></div>
Возвращаемое значение равно Null, поэтому, если у меня есть Javascript, которому необходимо знать ширину чего-либо для выполнения некоторой логики (я увеличиваю ширину на 1%, а не до определенного значения), возвращаю Null, когда я ожидаю строку «50%. "действительно не работает.
Итак, мой вопрос: у меня есть значения в стиле CSS, которые не расположены встроенными, как я могу получить эти значения? Как я могу изменить стиль вместо встроенных значений с учетом идентификатора?
Ответы:
Хорошо, похоже, вы хотите изменить глобальный CSS, чтобы эффективно изменить все элементы стиля peticular одновременно. Я недавно научился делать это сам из учебника Шона Олсона . Вы можете напрямую сослаться на его код здесь .
Вот резюме:
Вы можете получить таблицы стилей через
document.styleSheets
. Фактически это вернет массив всех таблиц стилей на вашей странице, но вы можете определить, на какой из них вы находитесь, с помощьюdocument.styleSheets[styleIndex].href
свойства. После того, как вы нашли таблицу стилей, которую хотите отредактировать, вам нужно получить массив правил. Это называется «правилами» в IE и «cssRules» в большинстве других браузеров. Способ узнать, какое CSSRule вы используете, - этоselectorText
свойство. Рабочий код выглядит примерно так:Сообщите мне, как это работает для вас, и прокомментируйте, если увидите какие-либо ошибки.
источник
rule.value
в FF 20. Однако естьrule.style
, который настраивается и ведет себя какelement.style
. Ср. https://developer.mozilla.org/en-US/docs/DOM/CSSStyleRule . Проверкаrule.type == rule.STYLE_RULE
также может быть хорошей идеей , перед обращениемrule.selectorText
.document.styleSheets[styleIndex].cssRules.[ruleIndex].style = {'color':'red', 'background-color':'green'};
у меня сработало, спасибо!Пожалуйста! Просто спросите w3 ( http://www.quirksmode.org/dom/w3c_css.html )! Или на самом деле мне потребовалось пять часов ... но вот оно!
Функция очень проста в использовании .. пример:
Ой..
РЕДАКТИРОВАТЬ: как @ user21820 описал в своем ответе, возможно, нет необходимости изменять все таблицы стилей на странице. Следующий скрипт работает с IE5.5, а также с последней версией Google Chrome и добавляет только описанную выше функцию css ().
источник
Собрав код в ответах, я написал эту функцию, которая, похоже, хорошо работает на моем FF 25.
Это способ поместить значения в CSS, которые будут использоваться в JS, даже если они не будут поняты браузером. например maxHeight для тела в прокручиваемой таблице.
Вызов :
CCSStylesheetRuleStyle('default', "#mydiv", "height");
CCSStylesheetRuleStyle('default', "#mydiv", "color", "#EEE");
источник
document.styleSheets[m].href
будет нулевым и завершится ошибкой.Я не знаю, почему другие решения просматривают весь список таблиц стилей для документа. Это создает новую запись в каждой таблице стилей, что неэффективно. Вместо этого мы можем просто добавить новую таблицу стилей и просто добавить туда желаемые правила CSS.
Обратите внимание, что мы можем переопределить даже встроенные стили, установленные непосредственно для элементов, добавив "! Important" к значению свойства, если для этого свойства еще не существует более конкретных объявлений стиля "! Important".
источник
У меня недостаточно репутации для комментариев, поэтому я отформатирую ответ, но это всего лишь демонстрация рассматриваемой проблемы.
Кажется, когда стили элементов определены в таблицах стилей, они не видны для getElementById ("someElement"). Style
Этот код иллюстрирует проблему ... Код снизу на jsFiddle .
В тесте 2 при первом вызове оставшееся значение элемента не определено, и поэтому то, что должно быть простым переключателем, испортилось. Для моего использования я определю свои важные значения стиля встроенными, но, похоже, это частично противоречит цели таблицы стилей.
Вот код страницы ...
Я надеюсь, что это поможет пролить свет на проблему.
Пропускать
источник
Вы можете получить "вычисленные" стили любого элемента.
IE использует что-то под названием «currentStyle», Firefox (и я предполагаю, что другие браузеры, «соответствующие стандартам») использует defaultView.getComputedStyle.
Для этого вам нужно написать кроссбраузерную функцию или использовать хороший фреймворк Javascript, такой как prototype или jQuery (найдите "getStyle" в файле прототипа javascript и "curCss" в файле javascript jquery).
Тем не менее, если вам нужна высота или ширина, вам, вероятно, следует использовать element.offsetHeight и element.offsetWidth.
Помните, что если вы добавите встроенный стиль к рассматриваемому элементу, он может действовать как значение «по умолчанию» и будет читаться Javascript при загрузке страницы, поскольку это свойство встроенного стиля элемента:
источник
Эта простая 32-строчная суть позволяет вам идентифицировать данную таблицу стилей и очень легко изменять ее стили:
источник
Я никогда не видел практического применения этого, но вам, вероятно, следует подумать о таблицах стилей DOM . Однако я, честно говоря, считаю, что это перебор.
Если вы просто хотите получить ширину и высоту элемента, независимо от того, откуда применяются размеры, просто используйте
element.offsetWidth
иelement.offsetHeight
.источник
Возможно, попробуйте это:
источник