1. 程式人生 > >document.documentElement和document.body的區別

document.documentElement和document.body的區別

本文轉載自:https://www.cnblogs.com/junxcode/p/5048185.html 感謝分享

網頁中獲取滾動條捲去部分的高度,可以通過 document.body.scrollTop 來獲\取,比如使div跟著滾動條滾動:

<div id="div" style="width:100px;height:100px;background:#ccc;position:absolute;"></div>
window.onscroll = function ()
{
    var div = document.getElementById("div")
; div.style.top = document.body.scrollTop + "px"; }

執行後沒有達到預期效果,輸出 document.body.scrollTop 的值一看,一直都是 0。一翻折騰,原來是 DTD 的問題,要是頁面直接用 開頭的話就沒有問題了。但是要符合 web 標準,DTD 當然是不能少的。

如果有 DTD 時用,那就用 document.documentElement.scrollTop 代替 document.body.scrollTop 就可以了。

window.onscroll = function ()
{
    var oFix =
document.getElementById("divfix"); oFix.style.top = document.documentElement.scrollTop + "px"; }

DTD相關說明:

頁面具有 DTD,或者說指定了 DOCTYPE 時,使用 document.documentElement。

頁面不具有 DTD,或者說沒有指定了 DOCTYPE,時,使用 document.body。

在 IE 和 Firefox 中均是如此。

為了相容,不管有沒有 DTD,可以使用如下程式碼:

var scrollTop = window.pageYOffset  //用於FF
|| document.documentElement.scrollTop || document.body.scrollTop || 0;

documentElement 和 body 相關說明:

body是DOM物件裡的body子節點,即 標籤;

documentElement 是整個節點樹的根節點root,即 標籤;

DOM把層次中的每一個物件都稱之為節點,就是一個層次結構,你可以理解為一個樹形結構,就像我們的目錄一樣,一個根目錄,根目錄下有子目錄,子目錄下還有子目錄。

以HTML超文字標記語言為例:整個文件的一個根就是,在DOM中可以使用document.documentElement來訪問它,它就是整個節點樹的根節點。而body是子節點,要訪問到body標籤,在指令碼中應該寫:document.body。