A27-DOM API

DOM

  • MDN
  • 阮一峰
    什么是DOM既们,DOM最重要的就是要明白它的概念,否則遇到問題也不知道如何下手
    大家都說DOM樹不铆,這是一個(gè)比喻蝌焚,易于理解,
    D就是文檔誓斥,想象它是一個(gè)樹狀的結(jié)構(gòu)(就像之前數(shù)據(jù)結(jié)構(gòu)里的二叉樹那樣)只洒,樹上有著節(jié)點(diǎn)(node)
    O就是對(duì)象,
    M也就是模型劳坑,把D和O做一個(gè)一一對(duì)應(yīng)的映射毕谴,就是這個(gè)模型
    所以DOM就是把文檔變成一個(gè)對(duì)象
    映射

    上圖紅字
    DOM轉(zhuǎn)化來的js對(duì)象里面到底存放什么由DOM標(biāo)準(zhǔn)規(guī)定
    比如:
    上圖的 head、body、meta析珊、link羡鸥、h1、p 都是Element的實(shí)例
    (中間存在其它函數(shù)忠寻,F(xiàn)12調(diào)試可見惧浴,比如document.body就是document.body.proto->HTMLBodyElement.prototype.proto->HTMLElement.prototype.proto->Element.prototype)
    根節(jié)點(diǎn)html比較特殊,是由document構(gòu)造的(DOucment->HTMLDocument,簡(jiǎn)寫)
    至于文本節(jié)點(diǎn)則是由

Node Api

Node 屬性

記住以下單詞奕剃;

  • child / children / parent
  • node
  • first / last
  • next / previous
  • sibling / siblings
  • type
  • value / text / content
  • inner / outer
  • element
    然后相互組合
    一部分:childNodes,firstChild,innerText,lastChild,nextSibling,nodeName,nodeType,nodeValue,outerText,ownerDocument,parentElement,parentNode,previousSibling,textContent
<html>
  <head></head>
  <body></body>
</html>

document.body.previousSibling // #text
document.body.previousSibling.previousSibling // <head></head>
docuemnt.body.previousElementSibling // <head></head>
// 為什么previousSibling返回的是文本節(jié)點(diǎn)呢衷旅,這是因?yàn)楸緛韉om是配對(duì)xml的,后來強(qiáng)行配對(duì)html
// previousSibling是 Node 的屬性纵朋,previousElementSibling是 Element 的屬性
// previousSibling 是本來就有的柿顶,previousElementSibling是后來加的
// 類似的還有 nextSibling / nextElementSibling, firstChild / firstElementChild 等等
// 可以在F12中嘗試,控制臺(tái)會(huì)顯示提示以及該屬性屬于哪個(gè)對(duì)象

幾個(gè)要注意的 Node Api

  • nodeName
    注意這個(gè)api很奇葩
    document.body.nodeName // 'BODY
    document.documentElement.nodeName // 'HTML
    document.nodeName不行操软,必須像上面那樣寫
    它對(duì)所有標(biāo)簽返回名稱都是大寫
    但是嘁锯!唯有svg,它返回小寫
    document.getElementsByTagName('svg')[0] // 'svg'
    這是因?yàn)閟vg是‘外來的’標(biāo)簽聂薪,它是后來新加的家乘,然后就這么小寫了……
  • nodeType -MDN
    只讀屬性 Node.nodeType 表示的是該節(jié)點(diǎn)的類型。其所有可能的值請(qǐng)參考節(jié)點(diǎn)類型常量.
    它返回一個(gè)整數(shù)來表示節(jié)點(diǎn)的類型
    (之所以這樣是因?yàn)楫?dāng)年的計(jì)算機(jī)還沒這么發(fā)達(dá)藏澳,而1比element的字節(jié)小多了)
    以下幾個(gè)需知:
    1 元素節(jié)點(diǎn)仁锯, Eg:<div>、<p>
    3 文本節(jié)點(diǎn)翔悠, 元素或者屬性中實(shí)際的文字业崖,比如<p>段落</p>中的段落二字
    9 Document節(jié)點(diǎn),
    11 DocumentFragment節(jié)點(diǎn) // 很特殊的一個(gè)節(jié)點(diǎn)(暫時(shí)我還不清楚蓄愁,google DocumentFragment優(yōu)化)
    document.body.nodeType // 1
    document.nodeType // 9
    document.documentElement.nodetype // 1
    document.documentElement.nodeName // 'HTML'
    // 所以document.documentElement才是html双炕,document不是?
    
  • innerTexttextContent -MDN
    區(qū)別:
    • textContent 會(huì)獲取所有元素的內(nèi)容涝登,包括 <script> 和 <style> 元素雄家,然而 innerText 不會(huì)。
    • innerText意識(shí)到樣式胀滚,并且不會(huì)返回隱藏元素的文本(設(shè)置display:none的元素),而textContent會(huì)乱投。
    • 由于 innerText 受 CSS 樣式的影響咽笼,它會(huì)觸發(fā)重排(reflow),但textContent 不會(huì)戚炫。
    • 與 textContent 不同的是, 在 Internet Explorer (對(duì)于小于等于 IE11 的版本) 中對(duì) innerText 進(jìn)行修改剑刑, 不僅會(huì)移除當(dāng)前元素的子節(jié)點(diǎn),而且還會(huì)永久性地破壞所有后代文本節(jié)點(diǎn)(所以不可能再次將節(jié)點(diǎn)再次插入到任何其他元素或同一元素中)。
  • childNodes -MDN
    Node.childNodes 返回包含指定節(jié)點(diǎn)的子節(jié)點(diǎn)的集合施掏,該集合為即時(shí)更新的集合(live collection)钮惠。
    var parent = document.getElementById('parent');
    parent.childNodes.length // 2
    parent.appendChild(document.createElement('div'));
    parent.childNodes.length // 請(qǐng)問現(xiàn)在 length 是多少
    
    // 3
    
    // 與之相反的是 querySelectorAll() ,它返回的是一個(gè)靜態(tài)的 NodeList
    var allDiv = document.querySelectorAll('div>
    allDiv.length // 假設(shè)是 2
    document.body.appendChild(  document.createElement('div')  )
    allDiv.length // 請(qǐng)問現(xiàn)在 length 的值是多少?七芭?素挽?
    // 2
    // querySelectorAll方法不屬于 node,是document 和 element 的
    
  • HTMLCollection與NodeList的區(qū)別有
    • HTMLCollection實(shí)例對(duì)象的成員只能是Element節(jié)點(diǎn)狸驳,NodeList實(shí)例對(duì)象的成員可以包含其他節(jié)點(diǎn)预明。
    • HTMLCollection實(shí)例對(duì)象可以用id屬性或name屬性引用節(jié)點(diǎn)元素,NodeList只能使用數(shù)字索引引用耙箍。
    • HTML DOM 中的 HTMLCollection 是即時(shí)更新的(live)撰糠;
      當(dāng)其所包含的文檔結(jié)構(gòu)發(fā)生改變時(shí),它會(huì)自動(dòng)更新辩昆。
      NodeList 對(duì)象大多數(shù)情況下是個(gè)實(shí)時(shí)集合阅酪。
      意思是說,如果文檔中的節(jié)點(diǎn)樹發(fā)生變化汁针,則已經(jīng)存在的 NodeList 對(duì)象也可能會(huì)變化术辐。例如,Node.childNodes 是實(shí)時(shí)的扇丛。
      在另一些情況下术吗,NodeList 是一個(gè)靜態(tài)集合,也就意味著隨后對(duì)文檔對(duì)象模型的任何改動(dòng)都不會(huì)影響集合的內(nèi)容帆精。document.querySelectorAll 返回一個(gè)靜態(tài)的 NodeList较屿。

Node 方法 (如果一個(gè)屬性是函數(shù),那么這個(gè)屬性就也叫做方法卓练;換言之隘蝎,方法是函數(shù)屬性)

  • appendChild()
  • cloneNode() // 分深、淺拷貝
  • contains()
  • hasChildNodes()
  • insertBefore()
  • isEqualNode() // 看起來相等
  • isSameNode() // 完全相等襟企,可以用 === 來代替
  • removeChild()
  • replaceChild()
  • normalize() // 常規(guī)化
    基本看見名字就知道作用嘱么,不清楚也可以查MDN。

Document Api -MDN

Document 屬性

  • body
  • characterSet
  • childElementCount
  • children
  • doctype
  • documentElement
  • domain
  • fullscreen
  • head
  • hidden
  • images
  • links
  • location
  • onxxxxxxxxx
  • origin
  • plugins
  • readyState
  • referrer
  • scripts
  • scrollingElement
  • styleSheets
  • title
  • visibilityState

Document 方法:

  • close()
  • createDocumentFragment()
  • createElement()
  • createTextNode()
  • execCommand()
  • exitFullscreen()
  • getElementById()
  • getElementsByClassName()
  • getElementsByName()
  • getElementsByTagName()
  • getSelection()
  • hasFocus()
  • open()
  • querySelector()
  • querySelectorAll()
  • registerElement()
  • write()
  • writeln()

Element Api -MDN

關(guān)于 DOM API 更多見之后寫的常用 API顽悼。(待續(xù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末曼振,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蔚龙,更是在濱河造成了極大的恐慌冰评,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件木羹,死亡現(xiàn)場(chǎng)離奇詭異甲雅,居然都是意外死亡解孙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門抛人,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弛姜,“玉大人,你說我怎么就攤上這事妖枚⊥⒕剩” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵盅惜,是天一觀的道長(zhǎng)中剩。 經(jīng)常有香客問我,道長(zhǎng)抒寂,這世上最難降的妖魔是什么结啼? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮屈芜,結(jié)果婚禮上郊愧,老公的妹妹穿的比我還像新娘。我一直安慰自己井佑,他們只是感情好属铁,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躬翁,像睡著了一般焦蘑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盒发,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天例嘱,我揣著相機(jī)與錄音,去河邊找鬼宁舰。 笑死拼卵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛮艰。 我是一名探鬼主播腋腮,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼壤蚜!你這毒婦竟也來了即寡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤袜刷,失蹤者是張志新(化名)和其女友劉穎嘿悬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體水泉,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了草则。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钢拧。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炕横,靈堂內(nèi)的尸體忽然破棺而出源内,到底是詐尸還是另有隱情,我是刑警寧澤份殿,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布膜钓,位于F島的核電站,受9級(jí)特大地震影響卿嘲,放射性物質(zhì)發(fā)生泄漏颂斜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一拾枣、第九天 我趴在偏房一處隱蔽的房頂上張望沃疮。 院中可真熱鬧,春花似錦梅肤、人聲如沸司蔬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俊啼。三九已至,卻和暖如春左医,著一層夾襖步出監(jiān)牢的瞬間授帕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工炒辉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留豪墅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓黔寇,卻偏偏與公主長(zhǎng)得像偶器,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缝裤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 概述 DOM(Document Object Model)文檔對(duì)象模型屏轰,指的是 XML 文檔,需要說明的是憋飞,HTM...
    bowen_wu閱讀 387評(píng)論 0 0
  • 原生DOM接口挺多的霎苗,需要花點(diǎn)時(shí)間研究下,不過先把基礎(chǔ)整好榛做,后面框架估計(jì)好學(xué)點(diǎn)唁盏。 1. DOM是啥 1.1 知識(shí)回...
    吳少在coding閱讀 1,813評(píng)論 0 7
  • 本章內(nèi)容 理解包含不同層次節(jié)點(diǎn)的 DOM 使用不同的節(jié)點(diǎn)類型 克服瀏覽器兼容性問題及各種陷阱 DOM 是針對(duì) HT...
    悶油瓶小張閱讀 644評(píng)論 0 1
  • 一 下午四點(diǎn)鐘厘擂,何木趴在藍(lán)色的欄桿上發(fā)呆昆淡,頭頂?shù)奶炜漳敲催b遠(yuǎn)那么湛藍(lán),遠(yuǎn)比如今要來的酣暢淋漓刽严。 遠(yuǎn)處高年級(jí)的同學(xué)們...
    少女小偷閱讀 1,236評(píng)論 3 21
  • 和很多人一樣昂灵,我從小在大城市長(zhǎng)大,對(duì)野生動(dòng)植物的了解只限于書本舞萄,并沒有多少親自接觸的經(jīng)驗(yàn)眨补,。而在離亞州非常遙遠(yuǎn)的非...
    茉莉夏依閱讀 225評(píng)論 0 0