对于一个DOM元素,如何获取特定元素在css中指定的所有样式?是要遍历所有css样式名称吗?
还是有更优雅的方法?Firebug是如何做到这一点的?
谢谢。
还是有更优雅的方法?Firebug是如何做到这一点的?
谢谢。
你应该可以使用getComputedStyle来获取它:
var css = window.getComputedStyle(element);
for (var i=0; i<css.length; i++) {
console.log(css[i] +'='+css.getPropertyValue(""+css[i]))
}
然而,此方法返回计算后的样式,这意味着它将执行某些计算并将您的值转换为像素(px)。例如,如果您有一个行高为1.2
,则它将被返回为57.6px
而不是1.2
之前的解决方案在扩展之前修改样式,导致样式混乱。此外,您还会得到很多默认样式。
我的解决方案是剥离默认样式,并保留元素级联样式。
在控制台中运行,并从“元素”视图中复制所需元素。(已在Chrome中测试)
function setStyle(theElement) {
var els = theElement.children;
for(var i = 0, maxi = els.length; i < maxi; i++)
{
setStyle(els[i]);
var defaultElem = document.createElement(els[i].nodeName)
var child = document.body.appendChild(defaultElem);
var defaultsStyles = window.getComputedStyle(defaultElem,null);
var computed = window.getComputedStyle(els[i],null).cssText;
for(var j = 0, maxj = defaultsStyles.length; j < maxj; j++)
{
var defaultStyle = defaultsStyles[j] + ": " + defaultsStyles.getPropertyValue(""+defaultsStyles[j]) + ";"
if(computed.startsWith(defaultStyle)) {
computed = computed.substring(defaultStyle.length);
} else {
computed = computed.replace(" " + defaultStyle, "");
}
}
child.remove();
els[i].setAttribute("style", computed);
}
}
setStyle(document.getElementsByTagName("body")[0]);
console.log("DONE");
var myElement = document.getElementById('someId');
var myElementStyle = myElement.style;
for(var i in myElementStyle){
// if it's not a number-index, print it out.
if(/^[\d]+/.exec(i) == null){
console.log("Style %s = %s", i, myElementStyle[i]);
/*
* Do other stuff here...
*/
}
}
window.getComputedStyle(element).getPropertyValue('font-size')
- Shahar