【问题标题】:Read CSS property of an element using JavaScript使用 JavaScript 读取元素的 CSS 属性
【发布时间】:2011-10-25 19:15:50
【问题描述】:

所以如果有一个css文件链接到一个网页,比如:

<link href="style.css" rel="stylesheet" type="text/css">

我想读取某个属性,例如一个 div 有 className='layout',我想使用 JavaScript 读取这个属性的详细信息,我该怎么做?

我搜索了很多,但几乎没有运气,请建议。

【问题讨论】:

  • 只用jquery,api.jquery.com/css
  • 实际上的问题是,如果在文档中定义了

标签: javascript css


【解决方案1】:

你有两个选择:

  1. 手动枚举和解析document.styleSheets 对象(不推荐,除非您想获取某个选择器定义的所有特定样式属性)。
  2. 创建一个匹配选择器的元素,并使用getComputedStylecurrentStyle(IE)方法获取属性值。

在您的示例中,尝试使用 class="layout" 获取 div 的某个属性(例如:color):

function getStyleProp(elem, prop){
    if(window.getComputedStyle)
        return window.getComputedStyle(elem, null).getPropertyValue(prop);
    else if(elem.currentStyle) return elem.currentStyle[prop]; //IE
}
window.onload = function(){
    var d = document.createElement("div"); //Create div
    d.className = "layout";                //Set class = "layout"
    alert(getStyleProp(d, "color"));       //Get property value
}

关于您的问题的评论,另一个功能:
下面的函数将忽略当前元素的内联样式定义。如果想知道继承自一个样式表的样式定义(没有继承父元素的样式定义),遍历树,临时擦除.cssText属性,如下函数所示:

function getNonInlineStyle(elem, prop){
    var style = elem.cssText; //Cache the inline style
    elem.cssText = "";        //Remove all inline styles
    var inheritedPropValue = getStyle(elem, prop); //Get inherited value
    elem.cssText = style;     //Add the inline style back
    return inheritedPropValue;
}

【讨论】:

  • 非常感谢,它可以在 Firefox 中运行,但是在使用 chrome 时不知何故我得到了 null,chrome 是否缺少某些东西?
  • 我很惊讶该函数在 FireFox 中工作,因为我的函数包含一个错字。现在已经修好了。小提琴:jsfiddle.net/kDNFz
  • 实际上我在测试时更正了它,所以是的,它有效,但我似乎无法在 chrome 中获得相同的结果,这是一个大问题。
  • @Johnydep Chrome 似乎不会应用样式属性,直到通过将元素添加到文档树来呈现元素。我已经通过添加两行成功测试了该功能,see" jsfiddle.net/QFfLB
  • 这也可以作为this older question的答案吗?
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多