我知道我可以集一个CSS值通过JavaScript,如:
document.getElementById('image_1').style.top = '100px';
但是,我能得到当前特定的样式值吗?我已经读到我可以得到元素的整个风格,但我不想不得不解析整个字符串,如果我不需要的话。
你可以使用getComputedStyle()。
getComputedStyle()
var element = document.getElementById('image_1'), style = window.getComputedStyle(element), top = style.getPropertyValue('top'); console.log(top);
<img id="image_1">
jsFiddle.
如果你以编程方式设置它,你可以像调用变量一样调用它(即document.getElementById('image_1').style.top)。否则,你可以使用jQuery:
document.getElementById('image_1').style.top
<html> <body> <div id="test" style="height: 100px;">Test</div> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> alert($("#test").css("height")); </script> </body> </html>
出于安全考虑,在尝试读取元素之前,您可能希望检查元素是否存在。如果它不存在,您的代码将抛出一个异常,这将停止JavaScript其余部分的执行,并可能向用户显示错误消息——这不好。你希望能够优雅地面对失败。
var height, width, top, margin, item; item = document.getElementById( "image_1" ); if( item ) { height = item.style.height; width = item.style.width; top = item.style.top; margin = item.style.margin; } else { // Fail gracefully here }
使用下面的方法。它帮助了我。
document.getElementById('image_1').offsetTop
另见Get Styles。
元素。style属性让你只知道在该元素中定义为内联的CSS属性(通过编程方式,或者在元素的style属性中定义),你应该得到计算的样式。
在跨浏览器的方式中并不是那么容易做到的,IE有自己的方式,通过元素。而DOM Level 2的标准方式,被其他浏览器实现是通过document.defaultView.getComputedStyle方法。
这两种方式存在差异,例如IE元素。currentStyle属性期望你访问由两个或多个单词组成的CSS属性名(如maxHeight, fontSize, backgroundColor等),标准方式期望用破折号分隔的属性(如max-height, font-size, background-color等)。 …< / p >
function getStyle(el, styleProp) { var value, defaultView = (el.ownerDocument || document).defaultView; // W3C standard way: if (defaultView && defaultView.getComputedStyle) { // sanitize property name to css notation // (hyphen 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; } }
主参考stackoverflow . > . > . >主参考stackoverflow . > . >
跨浏览器的解决方案,检查CSS值没有DOM操作:
function get_style_rule_value(selector, style) { for (var i = 0; i < document.styleSheets.length; i++) { var mysheet = document.styleSheets[i]; var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules; for (var j = 0; j < myrules.length; j++) { if (myrules[j].selectorText && myrules[j].selectorText.toLowerCase() === selector) { return myrules[j].style[style]; } } } };
用法:
get_style_rule_value('.chart-color', 'backgroundColor')
净化版本(强制选择器输入为小写,并允许用例不带前导"。")
function get_style_rule_value(selector, style) { var selector_compare=selector.toLowerCase(); var selector_compare2= selector_compare.substr(0,1)==='.' ? selector_compare.substr(1) : '.'+selector_compare; for (var i = 0; i < document.styleSheets.length; i++) { var mysheet = document.styleSheets[i]; var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules; for (var j = 0; j < myrules.length; j++) { if (myrules[j].selectorText) { var check = myrules[j].selectorText.toLowerCase(); switch (check) { case selector_compare : case selector_compare2 : return myrules[j].style[style]; } } } } }
上述没有DOM操作的跨浏览器解决方案无法工作,因为它给出的是第一个匹配规则,而不是最后一个匹配规则。最后一个匹配规则是应用的匹配规则。以下是一个工作版本:
function getStyleRuleValue(style, selector) { let value = null; for (let i = 0; i < document.styleSheets.length; i++) { const mysheet = document.styleSheets[i]; const myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules; for (let j = 0; j < myrules.length; j++) { if (myrules[j].selectorText && myrules[j].selectorText.toLowerCase() === selector) { value = myrules[j].style[style]; } } } return value; }
但是,对于复杂的选择器,这种简单的搜索将不起作用。
2021年
检查在使用之前
你可以使用computedStyleMap ()
答案是有效的,但有时你需要检查它返回什么单位,你可以得到没有任何slice()或substring()字符串。
slice()
substring()
var element = document.querySelector('.js-header-rep'); element.computedStyleMap().get('padding-left');
var element = document.querySelector('.jsCSS'); var con = element.computedStyleMap().get('padding-left'); console.log(con);
.jsCSS { width: 10rem; height: 10rem; background-color: skyblue; padding-left: 10px; }
<div class="jsCSS"></div>