DOM概述

1奈泪、解析過程
HTML加載完畢适贸,渲染引擎會在內(nèi)存中把HTML文檔,生成一個(gè)DOM樹涝桅,getElementById是獲取內(nèi)存中DOM上的元素節(jié)點(diǎn)拜姿,然后操作的時(shí)候 修改的是該元素的屬性,
2冯遂、DOM(文檔對象模型)
document是文檔對象模型的一部分
DOM是一個(gè)復(fù)合的數(shù)據(jù)類型


3蕊肥、DOM的數(shù)據(jù)結(jié)構(gòu)(樹狀)


4、HTML的組成部分為節(jié)點(diǎn)(Node)
在html當(dāng)中一切都是節(jié)點(diǎn)
每一個(gè)html標(biāo)簽都是一個(gè)元素節(jié)點(diǎn)蛤肌。(標(biāo)簽)
標(biāo)簽中的文字則是文字節(jié)點(diǎn)晴埂。(文本)
標(biāo)簽的屬性的屬性節(jié)點(diǎn)。(屬性)
5寻定、DOM節(jié)點(diǎn)的獲得
通過ID找到html元素

document.getElementById("id名稱");

通過標(biāo)簽名找到html元素

document.getElementsByTagName("div")

通過類名找到html元素

document.getElementsByClass("類名")儒洛;

標(biāo)簽數(shù)組= document.getElementsByTagName("div"); 通過標(biāo)簽名獲得標(biāo)簽數(shù)組
標(biāo)簽數(shù)組= document.getElementsByClassName("a");通過類名獲得標(biāo)簽數(shù)組
特殊情況:數(shù)組中的值只有1個(gè)。
document.getElementsByTagName("div")[0];取數(shù)組中第一個(gè)元素
document.getElementsByClassName("a")[0];取數(shù)組中第一個(gè)元素
6狼速、DOM訪問關(guān)系(節(jié)點(diǎn)的獲得)
節(jié)點(diǎn)的訪問關(guān)系琅锻,是以屬性的方式存在的。
DOM的節(jié)點(diǎn)并不是孤立的向胡,因此可以通過DOM節(jié)點(diǎn)之間的相對關(guān)系ui它們進(jìn)行訪問恼蓬。
7、父節(jié)點(diǎn)(parentNode)
調(diào)用者就是節(jié)點(diǎn):一個(gè)節(jié)點(diǎn)只有一個(gè)父節(jié)點(diǎn)僵芹。調(diào)用方式就是節(jié)點(diǎn)parentode
8处硬、兄弟節(jié)點(diǎn)
Sibling:兄弟的意思
Next:下一個(gè)的意思
Previous:前一個(gè)的意思
nextSibling:調(diào)用者是節(jié)點(diǎn)。IE678中指一個(gè)元素節(jié)點(diǎn)(標(biāo)簽)拇派。在火狐谷歌IE9之后指的是下一個(gè)節(jié)點(diǎn)(包括空文檔和換行節(jié)點(diǎn))荷辕。
nextElementSibling:在火狐谷歌IE9都指的是下一個(gè)元素節(jié)點(diǎn)凿跳。
總結(jié):在IE678中用nextSibling,在火狐谷歌以后用nextElementSibling

下一個(gè)兄弟節(jié)點(diǎn)=節(jié)點(diǎn).nextElementSibling || 節(jié)點(diǎn).nextSibling

previouSibing:調(diào)用者是節(jié)點(diǎn)疮方。IE678中指前一個(gè)元素節(jié)點(diǎn)(標(biāo)簽)控嗜,在火狐谷歌IE9以后指的是前一個(gè)元素節(jié)點(diǎn)(包括空文檔和換行節(jié)點(diǎn))
previousElementSibling:在火狐谷歌IE9都指的是前一個(gè)元素節(jié)點(diǎn)
總結(jié):在IE678中用previousSibling,在火狐谷歌IE9+以后用previousElementSibling骡显。

下一個(gè)兄弟節(jié)點(diǎn)=節(jié)點(diǎn).previousElementSibling|| 節(jié)點(diǎn).previousSibling

9疆栏、單個(gè)子節(jié)點(diǎn)
firstChild:調(diào)用者是節(jié)點(diǎn)。IE678中指前一個(gè)元素節(jié)點(diǎn)(標(biāo)簽)惫谤,在火狐谷歌IE9以后指的是前一個(gè)元素節(jié)點(diǎn)(包括空文檔和換行節(jié)點(diǎn))
firstElementChild:在火狐谷歌IE9都指的第一個(gè)元素節(jié)點(diǎn)壁顶。

第一個(gè)子節(jié)點(diǎn)=父節(jié)點(diǎn).firstElementChild || 父節(jié)點(diǎn).firstChild

lastChild:調(diào)用者是父節(jié)點(diǎn)。IE678中指最后一個(gè)子元素節(jié)點(diǎn)(標(biāo)簽)溜歪。在火狐谷歌IE9+以后都指的是最后一個(gè)節(jié)點(diǎn)(包括空文檔和換行節(jié)點(diǎn))若专。
lastElementChild:在火狐谷歌IE9都指的最后一個(gè)元素節(jié)點(diǎn)。

第一個(gè)子節(jié)點(diǎn)=父節(jié)點(diǎn).lastElementChild|| 父節(jié)點(diǎn).lastChild

10痹愚、所有子節(jié)點(diǎn)
childNodes:它是標(biāo)準(zhǔn)屬性,它返回指定元素的子元素集合蛔糯,包括HTML節(jié)點(diǎn)拯腮,所有屬性,文本節(jié)點(diǎn) (他還是W3C的親兒子 )
火狐 谷歌等高本版會把換行也看做是子節(jié)點(diǎn)
nodeType==1時(shí)才是元素節(jié)點(diǎn)(標(biāo)簽)
nodeType == 1 表示的是元素節(jié)點(diǎn) 記住 元素就是標(biāo)簽
nodeType == 2 表示是屬性節(jié)點(diǎn) 了解
nodeType == 3 是文本節(jié)點(diǎn) 了解
案例 :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="{CHARSET}">
        <title></title>
    </head>
    <body>
        <p id="demo">點(diǎn)我試試body元素節(jié)點(diǎn)的相關(guān)信息</p>
        <button onclick="myFuntion()">試試就試試</button>
        <script>
            function myFunction(){
                var txt="";
                var c=document.body.childNodes;
                for(i<0;i<c.length;i++){
                    txt=txt+c[i].nodeName+"<br>";
                };
                var x=document.getElementById("demo");  
                x.innerHTML=txt;
            }
            
        </script>
        <p><b>注釋:</b>元素中的空格被視為文本蚁飒,而文本被視為節(jié)點(diǎn)动壤。</p>
    </body>
</html>

children:非標(biāo)準(zhǔn)屬性,它返回指定元素的子元素集合淮逻。
但它只返回HTML節(jié)點(diǎn)琼懊,甚至不返回文本節(jié)點(diǎn),雖然不是標(biāo)準(zhǔn)的DOM屬性爬早,但它和innerHTML方法一樣哼丈,得到了幾乎所有瀏覽器的支持。
children在IE6/7/8中包含注釋節(jié)點(diǎn)
在IE678中筛严,注釋節(jié)點(diǎn)不要寫在里面醉旦。
子節(jié)點(diǎn)數(shù)組 = 父節(jié)點(diǎn).children; 用的最多

節(jié)點(diǎn)自己.parentNode.children[index];隨意得到兄弟節(jié)點(diǎn)。

function siblings(elm) {
        var a = [];
        var p = elm.parentNode.children;
        for(var i =0,pl= p.length;i<pl;i++) {
            if(p[i] !== elm) a.push(p[i]);
        }
        return a;
}

定義一個(gè)函數(shù)桨啃。必須傳遞自己车胡。定義一個(gè)數(shù)組,獲得自己的父親照瘾,在獲得自己父親的所有兒子(包括自己)匈棘。遍歷所喲與的兒子,只要不是自己就放進(jìn)數(shù)組中析命。

DOM節(jié)點(diǎn)操作

節(jié)點(diǎn)的訪問關(guān)系都是屬性主卫。節(jié)點(diǎn)的操作都是函數(shù)或者方法逃默。

創(chuàng)建節(jié)點(diǎn)

使用方法是這樣的document.createElement();
新的標(biāo)簽(節(jié)點(diǎn)) = document.createElement(“標(biāo)簽名”);

插入節(jié)點(diǎn)

使用方法: 父節(jié)點(diǎn).appendChild();
父節(jié)點(diǎn).appendChild(新節(jié)點(diǎn)); 父節(jié)點(diǎn)的最后插入一個(gè)新節(jié)點(diǎn)
使用方法:父節(jié)點(diǎn).insertBefore(要插入的節(jié)點(diǎn),參考節(jié)點(diǎn))队秩;
父節(jié)點(diǎn).insertBefore(新節(jié)點(diǎn),參考節(jié)點(diǎn))在參考節(jié)點(diǎn)前插入;
如果參考節(jié)點(diǎn)為null笑旺,那么他將在節(jié)點(diǎn)最后插入一個(gè)節(jié)點(diǎn)。

刪除節(jié)點(diǎn)

用法:用父節(jié)點(diǎn)刪除子節(jié)點(diǎn)馍资。
父節(jié)點(diǎn).removeChild(子節(jié)點(diǎn))筒主;必須制定要刪除的子節(jié)點(diǎn)
節(jié)點(diǎn)自己刪除自己:
不知道父級的情況下,可以這么寫:node.parentNode.removeChild(node)

復(fù)制節(jié)點(diǎn)( oldNode.cloneNode(true) )

想要復(fù)制的節(jié)點(diǎn)調(diào)用這個(gè)函數(shù)cloneNode()鸟蟹,得到一個(gè)新節(jié)點(diǎn)乌妙。 方法內(nèi)部可以傳參,入股是true建钥,深層復(fù)制藤韵,如果是false,只復(fù)制節(jié)點(diǎn)本身熊经。
新節(jié)點(diǎn)=要復(fù)制的節(jié)點(diǎn).cloneNode(參數(shù)) ; 參數(shù)可選復(fù)制節(jié)點(diǎn)
用于復(fù)制節(jié)點(diǎn)泽艘, 接受一個(gè)布爾值參數(shù), true 表示深復(fù)制(復(fù)制節(jié)點(diǎn)及其所有子節(jié)點(diǎn))镐依, false 表示淺復(fù)制(復(fù)制節(jié)點(diǎn)本身匹涮,不復(fù)制子節(jié)點(diǎn))

節(jié)點(diǎn)屬性

獲取:getAttribute(名稱)
設(shè)置:setAttribute(名稱, 值)
刪除:removeAttribute(名稱)
注意:IE6槐壳、7不支持然低。
調(diào)用者:節(jié)點(diǎn)。 有參數(shù)务唐。 沒有返回值雳攘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吨灭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沃于,更是在濱河造成了極大的恐慌海诲,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咨演,死亡現(xiàn)場離奇詭異蚯斯,居然都是意外死亡饵较,警方通過查閱死者的電腦和手機(jī)遭赂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茄猫,“玉大人困肩,你說我怎么就攤上這事⌒炕” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵比默,是天一觀的道長盆犁。 經(jīng)常有香客問我,道長侈百,這世上最難降的妖魔是什么翰铡? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任讽坏,我火速辦了婚禮,結(jié)果婚禮上迷捧,老公的妹妹穿的比我還像新娘胀葱。我一直安慰自己漠秋,他們只是感情好抵屿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布轧葛。 她就那樣靜靜地躺著艇搀,像睡著了一般求晶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芳杏,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天蚜锨,我揣著相機(jī)與錄音,去河邊找鬼亚再。 笑死,一個(gè)胖子當(dāng)著我的面吹牛则剃,可吹牛的內(nèi)容都是我干的如捅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼己肮,長吁一口氣:“原來是場噩夢啊……” “哼悲关!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寓辱,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤秫筏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后这敬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阳掐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年锚烦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮俄。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彻亲,死狀恐怖孕锄,靈堂內(nèi)的尸體忽然破棺而出苞尝,到底是詐尸還是另有隱情,我是刑警寧澤轴脐,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布抡砂,位于F島的核電站,受9級特大地震影響碴巾,放射性物質(zhì)發(fā)生泄漏丑搔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一煮仇、第九天 我趴在偏房一處隱蔽的房頂上張望顽冶。 院中可真熱鬧售碳,春花似錦、人聲如沸贸人。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至志鹃,卻和暖如春泽西,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捧杉。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工味抖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仔涩。 一個(gè)月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓熔脂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锤悄。 傳聞我的和親對象是個(gè)殘疾皇子零聚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 類操作className 解析過程 HTML加載完畢,渲染引擎會在內(nèi)存中把HTML文檔政模,生成一個(gè)DOM樹蚂会,getE...
    charlotte2018閱讀 361評論 0 1
  • DOM DOM內(nèi)容主要分為四部分: 什么是DOM和節(jié)點(diǎn)胁住; 獲取節(jié)點(diǎn); 節(jié)點(diǎn)操作(3種)彪见; 屬性操作(3種)余指。 什么...
    magic_pill閱讀 777評論 0 1
  • 1、DOM簡介碉碉。 當(dāng)頁面加載時(shí)柴钻,瀏覽器會創(chuàng)建頁面的文檔對象模型(Document Object Model)垢粮。文檔...
    duJing閱讀 557評論 0 1
  • 首先要知道的是,枚舉值 它是一個(gè)整形(int) 并且,它不 參加內(nèi)存的占用和釋放 枚舉定義變量即可直接使用,不用初...
    娘親Joanna閱讀 166評論 0 2
  • 六點(diǎn),天還沒亮粱腻,素簡就要起床搭車去駕校練車了斩跌,本來梁雪說也要早起送她,不巧昨晚車輪爆胎了柬批,今天還要去修理袖订。冬日早上...
    糖豆助教豆姐素簡閱讀 165評論 0 0