- 浏览: 1230628 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lankk:
lankk 写道事实上,在运行String s1=new St ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
事实上,在运行String s1=new String(&qu ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
同意1楼的说法http://docs.oracle.com/j ...
理解String 及 String.intern() 在实际中的应用 -
raoyutao:
...
jdk 线程池 ThreadPoolExecutor -
hongdanning:
理解了。之前困惑的一些明白了。谢谢分享。
理解String 及 String.intern() 在实际中的应用
原来HTML里是document.body
XHTML里是document.documentElement
都指的是<body>节点(OR元素)
可以这样兼容:
function
getBodyObj()
{
return (document.documentElement) ?
document.documentElement : document.body ;
}
在DHTML文档中对documentElement的说明是:Object that receives the reference to the document element,The root node of a typical HTML document is the html object.
body
当你使用 !DOCTYPE 声明指定标准兼容模式的时候,此对象将不再代表文档内容所渲染的整个表面。该对象当然可从其内容中获得其大小,但你也可以像 div 对象那样精确设置其大小。
也就是说在HTML4.0标准下用document.body,在XHTML标准下就要换成document.documentElement。XHTML下document.body仅仅表示body对象,而不能代表文档内容所渲染的整个表面。HTML下document.body.clientHeight表示浏览器的可视高度,XHTML下则是document.documentElement.clientHeight。document.body.clientHeight在XHTML下仅表示body的可视高度。在HTML4.0下用document.body.scrollTop;而在XHTML下则是document.documentElement.scrollTop,之前的document.body.scrollTop是恒为0的。
===================================================================
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 style="width:420px;height:470px;margin:0 auto;font-size:12px; border:solid 5px #ccc;"> <center> <table width="400" border="0" cellspacing="0" cellpadding="0" style="font-size:12px;margin-top:20px;"> <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()" style="height:20px;display:block;">内容高度是400PX,点击查看所有属性值</a> </center> </div> </body> </html>
其实,我们可以用document.documentElement代替document.body来获取我们想要的结果 将代码中的document.body替换为document.documentElement,再来看看各浏览器下的实际结果:
ii测试结果表明,IE系列浏览器对document.documentElement属性的解释是正确的,其它标准浏览器将offsetHeight解释成 了scrollHeight。火狐和netscape更是把这两个属性调换了过来。不过总的来说各属性都可以有个相应的解释,不会像 document.body一样只有可怜的两种解释。
终于可以放心地使用JS方法获取各种页面高宽属性了吧^_^!
发表评论
-
node npm windows
2018-10-15 16:06 1239在window下npm install, 遇到一 ... -
How to use requirejs in client side
2016-12-05 16:27 468How to use requirejs in client ... -
dojo get post demo
2015-07-31 14:37 1051dojo.xhrGet({ u ... -
dgrid之Grid Pagination 集成分页 后台rest service
2015-05-19 13:09 2378dgrid之Grid集成分页 后台rest serv ... -
angular 1.3.15 表达式bug
2015-04-15 13:41 871不确定这是 angular的还是浏览器的, chrom ... -
书上看来的js闭包列子
2014-01-22 12:19 1511js闭包列子 <html> <h ... -
犀牛书 & JavaScript Web Applications notes
2012-10-20 22:10 1650https://www.evernote.com/shar ... -
犀牛书 笔记
2012-10-15 09:51 5http://www.evernote.com/shard/s ... -
点击其他地方隐藏popup窗口
2011-12-14 16:54 2267现在系统有一个弹出的日期选择窗口, 要求在窗口弹出后, 点击窗 ... -
jqgrid 隔行变底色
2011-10-20 19:07 5265jgrid默认配置没有 隔行变底色的选项 查看源码 看他怎 ... -
twitter search jquery plugin
2011-06-20 16:05 1980详见 http://tweet.seaofclouds.co ... -
js encodeURIComponent encodeURI decodeURI
2011-05-26 15:48 1479js encodeURIComponent enco ... -
jquery hover hasClass insertBefore live blockUI children notice
2011-05-17 18:22 1865hover $(".onenote& ... -
jquery validate
2011-05-05 18:44 1183function(){ $("#re ... -
js 测试 用户名 中文 英文 数字 判断 函数 是否 存在
2010-11-03 20:24 1786/^((\w)|([\u4E00-\u9FA5])){1,20 ... -
css 滤镜 路径
2010-09-13 20:10 1204在ie6处理png透明的代码是: 1. filt ... -
jquery取得text,areatext,radio,checkbox,select的值
2010-07-09 18:21 1495jquery取得 text,areatext,radio,c ... -
js 遍历对象属性
2010-07-05 12:14 1405<!DOCTYPE html PUBLIC " ... -
jQuery 对Select的操作
2010-06-30 20:36 1117语法解释: 1. $("# ... -
国家地区 js 数组
2010-06-30 19:06 4744en var geolocation= [ [" ...
相关推荐
在探讨“火狐、谷歌、IE关于`document.body.scrollTop`和`document.documentElement.scrollTop`以及值为0的问题”这一主题时,我们深入分析了浏览器在处理页面滚动位置时的不同行为,尤其是当滚动位置值始终为0时的...
在JavaScript的DOM操作中,document.documentElement 和 document.body 是两个非常重要的属性,它们分别代表了文档的不同部分。理解这两者之间的区别对于前端开发者来说至关重要,尤其是在进行页面布局和滚动操作时...
- 在处理跨浏览器兼容性问题时,建议使用 `document.documentElement.scrollTop` 而不是 `document.body.scrollTop`。 - 使用 `window.scrollTo` 或 `window.scrollBy` 方法时,注意它们在不同浏览器中的兼容性差异...
var scrollTop = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop; console.log('当前滚动位置:', scrollTop); }; ``` 总的来说,理解和正确使用`document....
5. **浏览器兼容性**:虽然大部分现代浏览器都支持 `document.body.scrollTop`,但在一些老版本的IE浏览器中可能需要使用 `document.documentElement.scrollTop` 来兼容。 6. **CSS替代方案**:有时候,为了避免...
在标准模式下,则需要先判断document.documentElement.scrollLeft和document.documentElement.scrollTop是否为0,若是则使用document.body.scrollLeft和document.body.scrollTop。 了解了这些区别后,前端开发者在...
Vue中document.body.scrollTop的值总为零的解决办法 最近在做vue的时候监听页面滚动发现document.body.scrollTop一直为0 但是发现document.body.scrollTop一直是0。 查资料发现是DTD的问题。 页面指定了DTD,即指定...
- 通过`document.body.innerText = s`将获取到的源代码字符串设置为`<body>`标签内的文本内容。 - 这样做可以将HTML源代码以纯文本的形式显示出来,方便阅读和分析。 #### 示例代码解析 ```javascript ...
在标准的浏览器下,需要注意的东西,例如双击自动滚动 var diffY; if (document.documentElement && document.... else if (document.body) diffY = document.body.scrollTop else {/*Netscape stuff*/}
例如,`document.documentElement.childNodes[0]`可以获取`<head>`元素,而`document.documentElement.lastChild.childNodes[0]`可以获取`<body>`的第一个子元素。 6. 操作DOM: 通过`document.documentElement`,...
在标准模式下,浏览器倾向于使用`document.documentElement.scrollTop`来获取页面的滚动位置,而不是`document.body.scrollTop`。 `document.documentElement` 指的是HTML文档的根元素,即`<html>`标签。在标准模式...
上次的测试说明了document.body属性并不会给我们返回预期的结果,比如我们用document.body.clientHeight原本想取得“页面可见区域高度”,可实际上返回的是“页面实际内容高度”。 那我们怎么办呢?难道加上了文档...
这个函数同样通过比较`document.body.clientHeight`和`document.documentElement.clientHeight`来确定可视区域的高度。 #### 四、获取文档总高度 文档总高度是指整个网页(包括不可见部分)的高度。这对于判断是否...
这个函数通过检查 `document.documentElement.scrollTop` 和 `document.body.scrollTop` 来确定滚动条的位置。在不同的浏览器中,这两个属性可能有不同的行为,因此需要进行条件判断来确保兼容性。 ```javascript ...
3. `document.body.scrollWidth`和`scrollHeight`表示元素的实际内容宽度和高度,即使内容超过了可视区域。 4. `document.body.scrollTop`和`scrollLeft`分别表示垂直和水平方向上的滚动量。 此外,`window`对象...
在标准模式下,IE和Firefox等现代浏览器倾向于遵循W3C标准,其中规定应该使用`document.documentElement.scrollTop`来获取整个页面的滚动位置,而不是`document.body.scrollTop`。因此,当你尝试通过`document.body....
但需要注意的是,对于IE5.5及更高版本,需要特别处理`document.body.scrollLeft`和`document.documentElement.scrollLeft`,以及`document.body.scrollTop`和`document.documentElement.scrollTop`,以确保在所有...