12|DOM2和DOM3

01|DOM變化

  1. Node類型的變化

    1. localName:不帶命名空間前綴的節(jié)點名稱精盅。
    2. namespaceURI:命名空間 URI 或者(在未指定的情況下是)null挟裂。
    3. prefix:命名空間前綴或者(在未指定的情況下是)null马昙。
  2. Document類型的變化

    1. createElementNS(namespaceURI, tagName):使用給定的 tagName 創(chuàng)建一個屬于命名空
      間 namespaceURI 的新元素.
    2. createAttributeNS(namespaceURI, attributeName):使用給定的 attributeName 創(chuàng)
      建一個屬于命名空間 namespaceURI 的新特性.
    3. getElementsByTagNameNS(namespaceURI, tagName):返回屬于命名空間 namespaceURI
      的 tagName 元素的 NodeList.
  3. Element類型變化

    1. getAttributeNS(namespaceURI,localName):取得屬于命名空間 namespaceURI 且名為
      localName 的特性
    2. getAttributeNodeNS(namespaceURI,localName):取得屬于命名空間 namespaceURI 且
      名為 localName 的特性節(jié)點
    3. getElementsByTagNameNS(namespaceURI, tagName):返回屬于命名空間 namespaceURI
      的 tagName 元素的 NodeList
    4. hasAttributeNS(namespaceURI,localName):確定當前元素是否有一個名為 localName
      的特性逗概,而且該特性的命名空間是 namespaceURI
    5. removeAttriubteNS(namespaceURI,localName):刪除屬于命名空間 namespaceURI 且名
      為 localName 的特性
    6. setAttributeNS(namespaceURI,qualifiedName,value):設(shè)置屬于命名空間 namespace?URI 且名為 qualifiedName 的特性的值為 value
    7. setAttributeNodeNS(attNode):設(shè)置屬于命名空間 namespaceURI 的特性節(jié)點
  4. NamedNodeMap類型的變化

    1. getNamedItemNS(namespaceURI,localName):取得屬于命名空間 namespaceURI 且名為
      localName 的項
    2. removeNamedItemNS(namespaceURI,localName):移除屬于命名空間 namespaceURI 且名
      為 localName 的項
    3. setNamedItemNS(node):添加 node锹锰,這個節(jié)點已經(jīng)事先指定了命名空間信息
  5. 框架的變化

訪問內(nèi)聯(lián)文檔的框架對象,如果說內(nèi)聯(lián)寬假來自其它域或者不同子域,或者使用了不同的協(xié)議,那么訪問對應(yīng)的文檔對象的時候就會報錯!

const myFrame = document.getElementById("myFrame");
const frameDocument = myFrame.contentDocument || myFrame.contentWindow.document;

02|樣式

其中比較重要的就是偏移量

  • offsetLeft/offsetTop 元素邊框到包含元素內(nèi)邊框的距離
  • offsetWidth/offsetHeight 元素寬高包括滾動條,邊框
  • offsetParent:保存包含元素的引用
offset.png

獲取元素在頁面中的偏移量:

const getElementLeft = element=>{
    let actualLfet = element.offsetLeft;
    let current = element.offsetParent;
    while(current!==null){
            actualLfet +=  current.offsetLeft;
            current = current.offsetParent;
    }
    return actualLeft;
} 
const getElementTop = element=>{
    let actualTop = element.offsetTop;
    let current = element.offsetParent;
    while(current!==null){
            actualTop +=  current.offsetTop;
            current = current.offsetParent;
    }
    return actualTop;
} 

需要注意的點就是,偏移量是只讀的,每次獲取都需要重新計算,因此建議用第三方變量保存偏移量的值! 提升性能

客戶區(qū)大小:

  • clientWidth:元素內(nèi)容及其內(nèi)邊距所占據(jù)的寬度大小
  • clientHeight:元素內(nèi)容及其內(nèi)邊距所占據(jù)的高度大小
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <title>JS Bin</title>
        <style type="text/css">
            border:1px dashed red;
            width:100px;
            height:100px;
        </style>
    </head>
    <body>
        <div id="mydiv" data-appid="12345" data-myname="probedream"></div>
        <script>
            const getElement = selector=>document.querySelector(selector)
            console.log(getElement("#mydiv").clientWidth);//100
        </script>
    </body>
</html>

獲取視口大小:

let  clientWdith = document.body.clientWidth || document.documentElement.clientWidth; 
let  clientHeight = document.body.clientHeight || document.documentElement.clientHeight; 

滾動區(qū)域大小:

 scrollHeight //在沒有滾動條的情況下拳亿,元素內(nèi)容總高度(內(nèi)容+內(nèi)邊距)
 scrollWidth
 scrollLeft //被隱藏在內(nèi)容區(qū)域左側(cè)的像素數(shù)
 scrollTop //被隱藏在內(nèi)容區(qū)域上方的像素數(shù),通過設(shè)置該值可以讓滾動條滾動到響應(yīng)位置

文檔總高度兼容方案:

let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
let clientHeight = document.documentElement.clientHeight || document.body.clientHeight;
let docHeight = Math.max(scrollHeight,clientHeight);

元素大小的確定:

getBoundingClientRect(client);

返回一個矩形對象,并且包含四個屬性:

  • left
  • top
  • right
  • bottom

元素在頁面中相對于視口的位置! 基本上最重要的或者說最基礎(chǔ)的內(nèi)容就差不多了!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市调榄,隨后出現(xiàn)的幾起案子踊赠,更是在濱河造成了極大的恐慌,老刑警劉巖每庆,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臼疫,死亡現(xiàn)場離奇詭異,居然都是意外死亡扣孟,警方通過查閱死者的電腦和手機烫堤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸽斟,你說我怎么就攤上這事拔创。” “怎么了富蓄?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵剩燥,是天一觀的道長。 經(jīng)常有香客問我立倍,道長灭红,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任口注,我火速辦了婚禮变擒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寝志。我一直安慰自己娇斑,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布材部。 她就那樣靜靜地躺著毫缆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乐导。 梳的紋絲不亂的頭發(fā)上苦丁,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音物臂,去河邊找鬼旺拉。 笑死,一個胖子當著我的面吹牛鹦聪,可吹牛的內(nèi)容都是我干的账阻。 我是一名探鬼主播蒂秘,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼泽本,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姻僧?” 一聲冷哼從身側(cè)響起规丽,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撇贺,沒想到半個月后赌莺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡松嘶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年艘狭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡巢音,死狀恐怖遵倦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情官撼,我是刑警寧澤梧躺,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站傲绣,受9級特大地震影響掠哥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秃诵,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一续搀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顷链,春花似錦目代、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至煞抬,卻和暖如春霜大,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背革答。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工战坤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人残拐。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓途茫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溪食。 傳聞我的和親對象是個殘疾皇子囊卜,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355