有没有办法从Javascript代码中检测元素的真实边框、内边距和外边距?如果您查看以下代码:
<html>
<head>
<style>
<!--
.some_class {
padding-left: 2px;
border: 2px solid green;
}
-->
</style>
<script>
<!--
function showDetails()
{
var elem = document.getElementById("my_div");
alert("elem.className=" + elem.className);
alert("elem.style.padding=" + elem.style.padding);
alert("elem.style.paddingLeft=" + elem.style.paddingLeft);
alert("elem.style.margin=" + elem.style.margin);
alert("elem.style.marginLeft=" + elem.style.marginLeft);
alert("elem.style.border=" + elem.style.border);
alert("elem.style.borderLeft=" + elem.style.borderLeft);
}
-->
</script>
</head>
<body>
<div id="my_div" class="some_class" style="width: 300px; height: 300px; margin-left: 4px;">
some text here
</div>
<button onclick="showDetails();">show details</button>
</body>
</html>
如果您单击按钮,可以看到填充不正确。只有通过"style"直接定义的属性才会被报告回来,通过CSS类定义的属性不会被报告。
是否有一种方法可以获取这些属性的最终值?我的意思是在浏览器计算和应用所有CSS设置之后获得的值。
document.defaultView.getComputedStyle(div,null).getPropertyValue('margin-top')
时需要加上破折号,但是对于div.currentStyle['marginTop']
则需要使用驼峰命名法。您可以使用编程来解决这个问题,例如:var prop='margin-top';prop.replace(/^-/,'').replace(/-[a-z]/g,function(s){return s.substring(1).toUpperCase();});
运行后将得到prop==='marginTop'
(也适用于供应商前缀)。 - Yeti