手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >用document.documentElement取代document.body的原因分析
用document.documentElement取代document.body的原因分析
摘要:IE6在页面内容超出窗口大小时将宽度属性scrollWidth、clientWidth、offsetWidth都解释为内容实际宽度。上次的测...

IE6在页面内容超出窗口大小时将宽度属性scrollWidth、clientWidth、offsetWidth都解释为内容实际宽度。

上次的测试说明了document.body属性并不会给我们返回预期的结果,比如我们用document.body.clientHeight原本想取得“页面可见区域高度”,可实际上返回的是“页面实际内容高度”。

那我们怎么办呢?难道加上了文档DTD类型之后就再也不能取到“可见区域高度”和“内容实际宽度”等等属性了吗?

复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>documentElement</title>

<style type="text/css">

body{margin:0;padding:0;font:12px/150% arial;}

</style>

<script type="text/javascript">

function a() {

var scrollTop;

var scrollLeft;

if (typeof window.pageYOffset != 'undefined') {

scrollTop = window.pageYOffset;

scrollLeft = window.pageXOffset;

}

else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {

scrollTop = document.documentElement.scrollTop;

scrollLeft = document.documentElement.scrollLeft;

}

else if (typeof document.body != 'undefined') {

scrollTop = document.body.scrollTop;

scrollLeft = document.body.scrollLeft;

}

var scrollHeight = document.documentElement.scrollHeight;

var scrollWidth = document.documentElement.scrollWidth;

var clientWidth = document.documentElement.clientWidth;

var clientHeight = document.documentElement.clientHeight;

var offsetWidth = document.documentElement.offsetWidth;

var offsetHeight = document.documentElement.offsetHeight;

var screenTop = window.screenTop;

var screenBottom = window.screenBottom;

var screenLeft = window.screenLeft;

var sheight = window.screen.height;

var swidth = window.screen.width;

var availHeight = window.screen.availHeight;

var availWidth = window.screen.availWidth;

document.getElementById('scrollTop').value = scrollTop;

document.getElementById('scrollLeft').value = scrollLeft;

document.getElementById('scrollHeight').value = scrollHeight;

document.getElementById('scrollWidth').value = scrollWidth;

document.getElementById('clientWidth').value = clientWidth;

document.getElementById('clientHeight').value = clientHeight;

document.getElementById('offsetWidth').value = offsetWidth;

document.getElementById('offsetHeight').value = offsetHeight;

document.getElementById('screenTop').value = screenTop;

document.getElementById('screenBottom').value = screenBottom;

document.getElementById('screenLeft').value = screenLeft;

document.getElementById('sheight').value = sheight;

document.getElementById('swidth').value = swidth;

document.getElementById('availHeight').value = availHeight;

document.getElementById('availWidth').value = availWidth;

}

</script>

</head>

<body>

<div>

<center>

<table width="400" border="0" cellspacing="0" cellpadding="0">

<tr>

<td width="187" align="right">scrollTop(滚动条卷过的高):</td>

<td width="10"> </td>

<td width="209"><input type="text" name="scrollTop" id="scrollTop" /></td>

</tr>

<tr>

<td align="right">scrollLeft(滚动条卷过的宽):</td>

<td> </td>

<td><input type="text" name="scrollLeft" id="scrollLeft" /></td>

</tr>

<tr>

<td align="right">scrollHeight(内容实际高度):</td>

<td> </td>

<td><input type="text" name="scrollHeight" id="scrollHeight" /></td>

</tr>

<tr>

<td align="right">scrollWidth(内容实际宽度):</td>

<td> </td>

<td><input type="text" name="scrollWidth" id="scrollWidth" /></td>

</tr>

<tr>

<td align="right">clientWidth(可见区域宽):</td>

<td> </td>

<td><input type="text" name="clientWidth" id="clientWidth" /></td>

</tr>

<tr>

<td align="right">clientHeight(可见区域高):</td>

<td> </td>

<td><input type="text" name="clientHeight" id="clientHeight" /></td>

</tr>

<tr>

<td align="right">offsetWidth(加滚动条宽?):</td>

<td> </td>

<td><input type="text" name="offsetWidth" id="offsetWidth" /></td>

</tr>

<tr>

<td align="right">offsetHeight(加滚动条高?):</td>

<td> </td>

<td><input type="text" name="offsetHeight" id="offsetHeight" /></td>

</tr>

<tr>

<td align="right">screenTop:</td>

<td> </td>

<td><input type="text" name="screenTop" id="screenTop" /></td>

</tr>

<tr>

<td align="right">screenBottom:</td>

<td> </td>

<td><input type="text" name="screenBottom" id="screenBottom" /></td>

</tr>

<tr>

<td align="right">screenLeft:</td>

<td> </td>

<td><input type="text" name="screenLeft" id="screenLeft" /></td>

</tr>

<tr>

<td align="right">sheight(分辨率高):</td>

<td> </td>

<td><input type="text" name="sheight" id="sheight" /></td>

</tr>

<tr>

<td align="right">swidth(分分辨率宽):</td>

<td> </td>

<td><input type="text" name="swidth" id="swidth" /></td>

</tr>

<tr>

<td align="right">availHeight:</td>

<td> </td>

<td><input type="text" name="availHeight" id="availHeight" /></td>

</tr>

<tr>

<td align="right">availWidth:</td>

<td> </td>

<td><input type="text" name="availWidth" id="availWidth" /></td>

</tr>

</table>

<a href="javascript:a()">内容高度是400PX,点击查看所有属性值</a>

</center>

</div>

</body>

</html>

其实,我们可以用document.documentElement代替document.body来获取我们想要的结果 将代码中的document.body替换为document.documentElement,再来看看各浏览器下的实际结果:

ii测试结果表明,IE系列浏览器对document.documentElement属性的解释是正确的,其它标准浏览器将offsetHeight解释成 了scrollHeight。火狐和netscape更是把这两个属性调换了过来。不过总的来说各属性都可以有个相应的解释,不会像 document.body一样只有可怜的两种解释。

终于可以放心地使用JS方法获取各种页面高宽属性了吧^_^!

【用document.documentElement取代document.body的原因分析】相关文章:

图片加载进度实时显示

剖析Node.js异步编程中的回调与代码设计模式

在JavaScript中处理时间之setMinutes()方法的使用

一个很简单的办法实现TD的加亮效果.

document.all还是document.getElementsByName?

总结一些js自定义的函数

javascript获取select值的方法分析

单击图片时直接出现另存为对话框

Javascript实现广告页面的定时关闭

js+html5实现canvas绘制简单矩形的方法

精品推荐
分类导航