Как получить значения стиля элемента HTML в javascript?
Я ищу способ извлечь стиль из элемента, для которого установлен стиль с помощью тега style.
<style>
#box {width: 100px;}
</style>
В теле
<div id="box"></div>
Я ищу прямой JavaScript без использования библиотек.
Я попробовал следующее, но продолжаю получать пропуски:
alert (document.getElementById("box").style.width);
alert (document.getElementById("box").style.getPropertyValue("width"));
Я заметил, что я могу использовать выше, только если я установил стиль, используя javascript, но не смог с тегами стиля.
7 ответов
element.style
Свойство позволяет вам знать только те свойства CSS, которые были определены как встроенные в этом элементе (программно или определены в атрибуте style элемента), вы должны получить вычисляемый стиль.
Это не так просто сделать кросс-браузерным способом, IE имеет свой собственный путь, через element.currentStyle
свойство, и стандартным способом DOM Level 2, реализованным другими браузерами, является document.defaultView.getComputedStyle
метод.
Два способа имеют различия, например, IE element.currentStyle
свойство ожидает, что вы получите доступ к именам свойств CCS, состоящих из двух или более слов в camelCase (например, maxHeight
, fontSize
, backgroundColor
и т. д.), стандартный способ ожидает свойства со словами, разделенными тире (например, max-height
, font-size
, background-color
, так далее).
Кроме того, IE element.currentStyle
вернет все размеры в единицах, которые они указали (например, 12pt, 50%, 5em), стандартный способ всегда вычислит фактический размер в пикселях.
Некоторое время назад я сделал кросс-браузерную функцию, которая позволяет вам получать вычисленные стили кросс-браузерным способом:
function getStyle(el, styleProp) {
var value, defaultView = (el.ownerDocument || document).defaultView;
// W3C standard way:
if (defaultView && defaultView.getComputedStyle) {
// sanitize property name to css notation
// (hypen separated words eg. font-Size)
styleProp = styleProp.replace(/([A-Z])/g, "-$1").toLowerCase();
return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
} else if (el.currentStyle) { // IE
// sanitize property name to camelCase
styleProp = styleProp.replace(/\-(\w)/g, function(str, letter) {
return letter.toUpperCase();
});
value = el.currentStyle[styleProp];
// convert other units to pixels on IE
if (/^\d+(em|pt|%|ex)?$/i.test(value)) {
return (function(value) {
var oldLeft = el.style.left, oldRsLeft = el.runtimeStyle.left;
el.runtimeStyle.left = el.currentStyle.left;
el.style.left = value || 0;
value = el.style.pixelLeft + "px";
el.style.left = oldLeft;
el.runtimeStyle.left = oldRsLeft;
return value;
})(value);
}
return value;
}
}
Вышеприведенная функция не подходит для некоторых случаев, например, для цветов, стандартный метод будет возвращать цвета в нотации rgb(...), в IE они будут возвращать их так, как они были определены.
В настоящее время я работаю над статьей в теме, вы можете следить за изменениями, внесенными в эту функцию, здесь.
Я считаю, что вы теперь можете использовать Window.getComputedStyle()
var style = window.getComputedStyle(element[, pseudoElt]);
Пример для получения ширины элемента:
window.getComputedStyle(document.querySelector('#mainbar')).width
В jQuery вы можете сделать alert($("#theid").css("width"))
,
- если вы еще не взглянули на jQuery, я настоятельно рекомендую его; это делает многие простые задачи javascript легкими.
Обновить
для записи, этому посту 5 лет. Сеть развивалась, развивалась и т.д. Есть способы сделать это с помощью Plain Old Javascript, что лучше.
Использовать
getComputedStyle
функция, вычисляемый стиль содержит все свойства CSS, установленные для элемента. Даже если не устанавливать свойство для элемента. Вы по-прежнему найдете это свойство в вычисляемых стилях.
Пример:
Вы можете сделать функцию getStyles
это будет элемент, а другие аргументы - это свойства, значения которых вы хотите.
const convertRestArgsIntoStylesArr = ([...args]) => {
return args.slice(1);
}
const getStyles = function () {
const args = [...arguments];
const [element] = args;
let stylesProps = [...args][1] instanceof Array ? args[1] : convertRestArgsIntoStylesArr(args);
const styles = window.getComputedStyle(element);
const stylesObj = stylesProps.reduce((acc, v) => {
acc[v] = styles.getPropertyValue(v);
return acc;
}, {});
return stylesObj;
};
Теперь вы можете использовать эту функцию следующим образом:
const styles = getStyles(document.body, "height", "width");
ИЛИ ЖЕ
const styles = getStyles(document.body, ["height", "width"]);
Используя.css() в jquery, можно получить доступ к тегу стиля и изменить его.
например:
var color = $( this ).css( "background-color" );
$( "#result" ).html( "That div is <span style='color:" +
color + ";'>" + color + "</span>." );