我希望能够从网页上未使用的CSS元素中获取样式。例如,这是页面:
<html>
<head>
<style type="text/css">
#custom{
background-color: #000;
}
</style>
</head>
<body>
<p>Hello world</p>
</body>
</html>
正如您所看到的,ID“custom”具有值,但未在文档中使用。我希望在页面中不使用它来获取“自定义”的所有值。我最接近的是:
el = document.getElementById('custom');
var result;
var styleProp = 'background-color';
if(el.currentStyle){
result = el.currentStyle[styleProp];
}else if (window.getComputedStyle){
result = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
}else{
result = "unknown";
}
答案 0 :(得分:5)
创建具有给定ID的新元素并将其附加到文档。然后只需读取值并删除元素。
示例:
var result,
el = document.body.appendChild(document.createElement("div")),
styleProp = 'background-color',
style;
el.id = 'custom';
style = el.currentStyle || window.getComputedStyle(el, null);
result = style[styleProp] || "unknown";
// Remove the element
document.body.removeChild(el);
答案 1 :(得分:1)
我不认为答案是非常好的,因为它需要向DOM添加元素,这可能会破坏您正在尝试做的事情或创建视觉故障。
使用document.styleSheets我认为您可以获得侵入性较小的解决方案。 (见here)
尝试类似:
var result;
var SS = document.styleSheets;
for(var i=0; i<SS.length; i++) {
for(var j=0; j<SS[i].cssRules.length; j++) {
if(SS[i].cssRules[j].selectorText == "#custom") {
result = SS[i].cssRules[j].style;
}
}
}
这应该为您提供一个包含所有样式作为键的对象。请记住,如果样式在样式表中重新声明,则可能需要更复杂的算法。