document.documentElement和document.body的區別
阿新 • • 發佈:2018-12-03
本文轉載自: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。