我今天一直在测试Javascript CSS函数,并注意到当使用.style.cssText时它只给了我用JS设置的CSS。
我反而希望获得元素的所有CSS,所以我猜我做错了或者可能需要另一个函数而不是像getComputedStyle但是对于整个CSS而不是单个属性值但是我找不到我需要的东西在搜索时。
所以我的问题是如何从代码的最后部分获取完整的CSS,如:
background-color: #ffcccc; font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif; font-size: 13px; color: #ff0000;
而不是输出的当前较短的CSS?
<html>
<head>
<style type="text/css" media="screen">
.MyDiv001 {
background-color: #ffcccc;
font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;
}
.MyDiv002 {
background-color: #ccffcc;
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
}
</style>
</head>
<body>
<div id="MyDiv001" class="MyDiv001">This is MyDiv001</div>
<div id="MyDiv002" class="MyDiv002">This is MyDiv002</div>
<br /><hr><br />
<script type="text/javascript">
// Select the MyDiv001 element
var MyDiv001 = document.getElementById("MyDiv001"); // Select MyDiv001
// Set some style property values for MyDiv001
MyDiv001.style.setProperty("font-size", "13px", null);
MyDiv001.style.setProperty("color", "#ff0000", null);
// Get the Computed Style for MyDiv001
var MyDiv001Style = window.getComputedStyle(MyDiv001);
// Show the MyDiv001 style property values
document.write( "MyDiv001 background-color = " + MyDiv001Style.getPropertyValue("background-color") + "<br />");
document.write( "MyDiv001 font-family = " + MyDiv001Style.getPropertyValue("font-family") + "<br />");
document.write( "MyDiv001 font-size = " + MyDiv001Style.getPropertyValue("font-size") + "<br /><br />");
// Select the MyDiv002 element
var MyDiv002 = document.getElementById("MyDiv002"); // Select MyDiv002
// Set some style property values for MyDiv002
MyDiv002.style.setProperty("font-size", "16px", null);
MyDiv002.style.setProperty("color", "#0000ff", null);
// Get the Computed Style for MyDiv002
var MyDiv002Style = window.getComputedStyle(MyDiv002);
// Show the MyDiv002 style property values
document.write( "MyDiv002 background-color = " + MyDiv002Style.getPropertyValue("background-color") + "<br />");
document.write( "MyDiv002 font-family = " + MyDiv002Style.getPropertyValue("font-family") + "<br />");
document.write( "MyDiv002 font-size = " + MyDiv002Style.getPropertyValue("font-size") + "<br /><br />");
// Not what i was expecting
document.write( "MyDiv001 CSS = " + MyDiv001.style.cssText+ "<br />"); // How do i get the full css?
document.write( "MyDiv002 CSS = " + MyDiv002.style.cssText+ "<br />"); // How do i get the full css?
</script>
</body>
</html>
编辑 - 如果可能的话,我想要一个使用常规Javascript的答案,希望我的代码的固定版本以及它不能返回完整CSS的原因,谢谢。
答案 0 :(得分:28)
MyDiv001.style.cssText
将仅返回由style
属性或属性设置的内联样式。
您可以使用getComputedStyle来获取应用于元素的所有样式。您可以迭代返回的对象以转储所有样式。
function dumpCSSText(element){
var s = '';
var o = getComputedStyle(element);
for(var i = 0; i < o.length; i++){
s+=o[i] + ':' + o.getPropertyValue(o[i])+';';
}
return s;
}
答案 1 :(得分:1)
请注意,getComputedStyle
会返回计算出的 值。这意味着 em
等相对单位将作为计算出的 px
值返回(如浏览器开发工具的 computed
选项卡中所示)。
根据您想要的结果,这可能会使它作为一个可行的解决方案完全失效。不过,其他答案——包括被接受的答案——都没有完全提及。
没有足够的代表发表评论,因此这个单独的答案。
答案 2 :(得分:0)
现在是2020年,我们终于可以做到
getComputedStyle(element).cssText
示例:
newElement.style.cssText = getComputedStyle(element).cssText
答案 3 :(得分:-1)
为什么不只是
`
const elt = document.querySelector("element");
function test(){
console.dir(getComputedStyle(elt, null));
}
test();
`