如何在 JavaScript 中获取 HTML 元素的样式值?

新手上路,请多包涵

我正在寻找一种从样式标签设置样式的元素中检索样式的方法。

 <style>
#box {width: 100px;}
</style>

在身体里

<div id="box"></div>

我正在寻找不使用库的直接 javascript。

我尝试了以下方法,但一直收到空白:

 alert (document.getElementById("box").style.width);
alert (document.getElementById("box").style.getPropertyValue("width"));

我注意到,如果我使用 javascript 设置了样式,我只能使用上述内容,但无法使用样式标签。

原文由 stan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 563
2 个回答

element.style 属性让您只知道在该元素中定义为 内联 的 CSS 属性(以编程方式,或在元素的 style 属性中定义),您应该获得 计算的 style

跨浏览器的方式没那么容易,IE有自己的方式,通过 element.currentStyle 属性,而DOM Level 2 标准 的方式,其他浏览器通过 document.defaultView.getComputedStyle 方法。

这两种方式是有区别的,例如IE element.currentStyle 属性期望你访问由 camelCase 中的两个或多个单词组成的CCS 属性名称(例如 maxHeight , fontSize , backgroundColor , etc), the standard way expects the properties with the words separated with dashes (eg 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 上它们将按定义返回颜色。

我目前正在撰写有关该主题的文章,您可以在 此处 关注我对此功能所做的更改。

原文由 Christian C. Salvadó 发布,翻译遵循 CC BY-SA 2.5 许可协议

我相信您现在可以使用 Window.getComputedStyle()

文档 MDN

 var style = window.getComputedStyle(element[, pseudoElt]);

获取元素宽度的示例:

 window.getComputedStyle(document.querySelector('#mainbar')).width

原文由 justina_de 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题