由document.body和document.documentElement想到的
更新時(shí)間:2009年04月13日 10:16:48 作者:
不知道大家對(duì)這個(gè)標(biāo)題有沒(méi)有想法,反正此前我一直把他們混為了一談。其實(shí)不然,首先需有個(gè)“標(biāo)準(zhǔn)”的概念。
對(duì)于document.compatMode,很多朋友可能都根我一樣很少接觸,知道他的存在卻不清楚他的用途。其實(shí)這個(gè)對(duì)于我們開(kāi)發(fā)兼容性的web頁(yè)面還是很有幫助,我們都知道,盒模型的渲染在 Standards Mode和Quirks Mode是有很大差別的,在不聲明Doctype的情況下,瀏覽器默認(rèn)是Quirks Mode。所以為兼容性考慮,我們可能需要獲取當(dāng)前的文檔渲染方式。
document.compatMode正好派上用場(chǎng),它有兩種可能的返回值:BackCompat和CSS1Compat,對(duì)其解釋如下:
BackCompat Standards-compliant mode is not switched on. (Quirks Mode)
CSS1Compat Standards-compliant mode is switched on. (Standards Mode)
當(dāng)文檔有了標(biāo)準(zhǔn)聲明時(shí), document.compatMode 的值就等于 "CSS1compat", 因此, 我們可以根據(jù) document.compatMode 的值來(lái)判斷文檔是否加了標(biāo)準(zhǔn)聲明
var height = document.compatMode=="CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight;
當(dāng)文檔有了標(biāo)準(zhǔn)聲明時(shí)火狐的style.top等等的設(shè)置必須加上“px”等單位,否則它不會(huì)認(rèn)。既然已經(jīng)說(shuō)道了這,再展開(kāi)一下。對(duì)于火狐:
一、offsetTop 返回的是數(shù)字,而 style.top 返回的是字符串,除了數(shù)字外還帶有單位:px。
二、offsetTop 只讀,而 style.top 可讀寫(xiě)。
三、如果沒(méi)有給 HTML 元素指定過(guò) top 樣式(即使在css中設(shè)定也不行),則 style.top 返回的是空字符串。
offsetLeft 與 style.left、offsetWidth 與 style.width、offsetHeight 與 style.height 也是同樣道理。
再說(shuō)說(shuō)他們的區(qū)別吧:
下面這段大家可能都見(jiàn)到過(guò),在網(wǎng)上被轉(zhuǎn)載過(guò)很多次,在這我也借用一下:
.Kfk428 { display:none; }
網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)挘?document.body.clientWidth;
網(wǎng)頁(yè)可見(jiàn)區(qū)域高: document.body.clientHeight;
網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)挘?document.body.offsetWidth (包括邊線的寬);
網(wǎng)頁(yè)可見(jiàn)區(qū)域高: document.body.offsetHeight (包括邊線的寬);
網(wǎng)頁(yè)正文全文寬: document.body.scrollWidth;
網(wǎng)頁(yè)正文全文高: document.body.scrollHeight;
網(wǎng)頁(yè)被卷去的高: document.body.scrollTop;
網(wǎng)頁(yè)被卷去的左: document.body.scrollLeft;
網(wǎng)頁(yè)正文部分上: window.screenTop;
網(wǎng)頁(yè)正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工作區(qū)高度: window.screen.availHeight;
屏幕可用工作區(qū)寬度:window.screen.availWidth;

scrollHeight: 獲取對(duì)象的滾動(dòng)高度。
scrollLeft:設(shè)置或獲取位于對(duì)象左邊界和窗口中目前可見(jiàn)內(nèi)容的最左端之間的距離
scrollTop:設(shè)置或獲取位于對(duì)象最頂端和窗口中可見(jiàn)內(nèi)容的最頂端之間的距離
scrollWidth:獲取對(duì)象的滾動(dòng)寬度
offsetHeight:獲取對(duì)象相對(duì)于版面或由父坐標(biāo) offsetParent 屬性指定的父坐標(biāo)的高度
offsetLeft:獲取對(duì)象相對(duì)于版面或由 offsetParent 屬性指定的父坐標(biāo)的計(jì)算左側(cè)位置
offsetTop:獲取對(duì)象相對(duì)于版面或由 offsetTop 屬性指定的父坐標(biāo)的計(jì)算頂端位置
event.clientX 相對(duì)文檔的水平座標(biāo)
event.clientY 相對(duì)文檔的垂直座標(biāo)
event.offsetX 相對(duì)容器的水平坐標(biāo)
event.offsetY 相對(duì)容器的垂直坐標(biāo)
document.documentElement.scrollTop 垂直方向滾動(dòng)的值
event.clientX+document.documentElement.scrollTop 相對(duì)文檔的水平座標(biāo)+垂直方向滾動(dòng)的量
以上主要指IE之中,F(xiàn)ireFox差異如下:
IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height
(需要提一下:CSS中的margin屬性,與clientWidth、offsetWidth、clientHeight、offsetHeight均無(wú)關(guān))
在設(shè)置了文檔類型后也可能有差異,以上僅供參考
document.compatMode正好派上用場(chǎng),它有兩種可能的返回值:BackCompat和CSS1Compat,對(duì)其解釋如下:
BackCompat Standards-compliant mode is not switched on. (Quirks Mode)
CSS1Compat Standards-compliant mode is switched on. (Standards Mode)
當(dāng)文檔有了標(biāo)準(zhǔn)聲明時(shí), document.compatMode 的值就等于 "CSS1compat", 因此, 我們可以根據(jù) document.compatMode 的值來(lái)判斷文檔是否加了標(biāo)準(zhǔn)聲明
var height = document.compatMode=="CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight;
當(dāng)文檔有了標(biāo)準(zhǔn)聲明時(shí)火狐的style.top等等的設(shè)置必須加上“px”等單位,否則它不會(huì)認(rèn)。既然已經(jīng)說(shuō)道了這,再展開(kāi)一下。對(duì)于火狐:
一、offsetTop 返回的是數(shù)字,而 style.top 返回的是字符串,除了數(shù)字外還帶有單位:px。
二、offsetTop 只讀,而 style.top 可讀寫(xiě)。
三、如果沒(méi)有給 HTML 元素指定過(guò) top 樣式(即使在css中設(shè)定也不行),則 style.top 返回的是空字符串。
offsetLeft 與 style.left、offsetWidth 與 style.width、offsetHeight 與 style.height 也是同樣道理。
再說(shuō)說(shuō)他們的區(qū)別吧:
下面這段大家可能都見(jiàn)到過(guò),在網(wǎng)上被轉(zhuǎn)載過(guò)很多次,在這我也借用一下:
.Kfk428 { display:none; }
網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)挘?document.body.clientWidth;
網(wǎng)頁(yè)可見(jiàn)區(qū)域高: document.body.clientHeight;
網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)挘?document.body.offsetWidth (包括邊線的寬);
網(wǎng)頁(yè)可見(jiàn)區(qū)域高: document.body.offsetHeight (包括邊線的寬);
網(wǎng)頁(yè)正文全文寬: document.body.scrollWidth;
網(wǎng)頁(yè)正文全文高: document.body.scrollHeight;
網(wǎng)頁(yè)被卷去的高: document.body.scrollTop;
網(wǎng)頁(yè)被卷去的左: document.body.scrollLeft;
網(wǎng)頁(yè)正文部分上: window.screenTop;
網(wǎng)頁(yè)正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工作區(qū)高度: window.screen.availHeight;
屏幕可用工作區(qū)寬度:window.screen.availWidth;

scrollHeight: 獲取對(duì)象的滾動(dòng)高度。
scrollLeft:設(shè)置或獲取位于對(duì)象左邊界和窗口中目前可見(jiàn)內(nèi)容的最左端之間的距離
scrollTop:設(shè)置或獲取位于對(duì)象最頂端和窗口中可見(jiàn)內(nèi)容的最頂端之間的距離
scrollWidth:獲取對(duì)象的滾動(dòng)寬度
offsetHeight:獲取對(duì)象相對(duì)于版面或由父坐標(biāo) offsetParent 屬性指定的父坐標(biāo)的高度
offsetLeft:獲取對(duì)象相對(duì)于版面或由 offsetParent 屬性指定的父坐標(biāo)的計(jì)算左側(cè)位置
offsetTop:獲取對(duì)象相對(duì)于版面或由 offsetTop 屬性指定的父坐標(biāo)的計(jì)算頂端位置
event.clientX 相對(duì)文檔的水平座標(biāo)
event.clientY 相對(duì)文檔的垂直座標(biāo)
event.offsetX 相對(duì)容器的水平坐標(biāo)
event.offsetY 相對(duì)容器的垂直坐標(biāo)
document.documentElement.scrollTop 垂直方向滾動(dòng)的值
event.clientX+document.documentElement.scrollTop 相對(duì)文檔的水平座標(biāo)+垂直方向滾動(dòng)的量
以上主要指IE之中,F(xiàn)ireFox差異如下:
IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height
(需要提一下:CSS中的margin屬性,與clientWidth、offsetWidth、clientHeight、offsetHeight均無(wú)關(guān))
在設(shè)置了文檔類型后也可能有差異,以上僅供參考
相關(guān)文章
手把手教你用Javascript實(shí)現(xiàn)觀察者模式
這篇文章主要為大家介紹了Javascript觀察者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12JavaScript算法教程之sku(庫(kù)存量單位)詳解
這篇文章主要給大家介紹了JavaScript算法教程之sku(庫(kù)存量單位)的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06全面兼容的javascript時(shí)間格式化函數(shù)(比較實(shí)用)
這篇文章主要介紹了全面兼容比較實(shí)用的javascript時(shí)間格式化函數(shù),需要的朋友可以參考下2014-05-05javascript 不用reverse實(shí)現(xiàn)字符串反轉(zhuǎn)的代碼
javascript 不用reverse實(shí)現(xiàn)字符串反轉(zhuǎn)的代碼,需要的朋友可以參考下。2010-03-03JS模態(tài)窗口返回值兼容問(wèn)題的完美解決方法
下面小編就為大家?guī)?lái)一篇JS模態(tài)窗口返回值兼容問(wèn)題的完美解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05通過(guò)js簡(jiǎn)單實(shí)現(xiàn)將一個(gè)文本內(nèi)容轉(zhuǎn)譯成加密文本
將文本內(nèi)容轉(zhuǎn)譯成加密文本,在某些情況下還是比較實(shí)用的,下面通過(guò)js簡(jiǎn)單實(shí)現(xiàn)下,感興趣的朋友不要錯(cuò)過(guò)2013-10-10微信小程序?qū)崿F(xiàn)tab和swiper切換結(jié)合效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)tab和swiper切換結(jié)合效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11