摘要:中的所有對(duì)象都是以對(duì)象的形式實(shí)現(xiàn)的。這意味著中的對(duì)象與原生對(duì)象的行為或活動(dòng)特點(diǎn)并不一致。該屬性指向表示整個(gè)文檔的文檔節(jié)點(diǎn)。同時(shí)由要插入的節(jié)點(diǎn)占據(jù)其位置。返回被移除的節(jié)點(diǎn)。操作類(lèi)名操作類(lèi)名時(shí),需要通過(guò)屬性添加刪除和替換類(lèi)名。
Note:IE中的所有DOM對(duì)象都是以COM對(duì)象的形式實(shí)現(xiàn)的。這意味著IE中的DOM對(duì)象與原生Javascript對(duì)象的行為或活動(dòng)特點(diǎn)并不一致。
DOM1級(jí)主要定義了HTML和XML的文檔的底層結(jié)構(gòu)。DOM2和DOM3級(jí)分為幾個(gè)模塊。
DOM2級(jí)核心(DOM Level 2 Core):在1級(jí)核心基礎(chǔ)上構(gòu)建,為節(jié)點(diǎn)添加了更多方法和屬性
DOM2級(jí)視圖(DOM Level 2 Views):為文檔定義了基于樣式信息的不同視圖
DOM2級(jí)事件(DOM Level 2 Events):說(shuō)明了如何使用事件與DOM文檔交互
DOM2級(jí)樣式(DOM Level 2 Style):定義了如何以編程方式來(lái)訪問(wèn)和改變CSS樣式信息
DOM2級(jí)遍歷和范圍(DOM Level 2 Tranversal and Range):引入了遍歷DOM文檔和選擇其特定部分的新接口。
DOM2級(jí)HTML(DOM Level 2 HTML):在1級(jí)HTML基礎(chǔ)上構(gòu)建,添加了更多屬性、方法和新街口。
// 判斷是否支持模塊 var DOM2Core = document.implementation.hasFeature("Core",2.0)DOM2級(jí)核心 Node
DOM1級(jí)定義了一個(gè)Node接口。該接口將由DOM中的所有節(jié)點(diǎn)類(lèi)型實(shí)現(xiàn)。
Javascript中的所有節(jié)點(diǎn)類(lèi)型都 繼承自Node類(lèi)型,因此所有節(jié)點(diǎn)類(lèi)型都共享著相同的基本屬性和方法。
兼容性:除IE外,其他所有瀏覽器都可以訪問(wèn)到這個(gè)類(lèi)型
節(jié)點(diǎn)類(lèi)型每個(gè)節(jié)點(diǎn)都有一個(gè)nodeType屬性,用于表明節(jié)點(diǎn)的類(lèi)型。
節(jié)點(diǎn)類(lèi)型由在Node類(lèi)型中定義的12個(gè)數(shù)值常量來(lái)表示,下面列出常用的幾個(gè)。
Node.ELEMENT_NODE: 1
Node.TEXT_NODE: 3
Node.COMMENT_NODE: 8
節(jié)點(diǎn)信息可以通過(guò)nodeName和nodeValue來(lái)了解節(jié)點(diǎn)信息。這兩個(gè)屬性取決于節(jié)點(diǎn)的類(lèi)型。
在使用這兩個(gè)節(jié)點(diǎn)之前,最好先檢測(cè)一下節(jié)點(diǎn)類(lèi)型。
如果節(jié)點(diǎn)是一個(gè)元素,nodeName中保存的始終是元素的標(biāo)簽名,而nodeValue值始終為0。
節(jié)點(diǎn)關(guān)系每個(gè)節(jié)點(diǎn)都有一個(gè)childNodes屬性,其中保存著一個(gè)NodeList對(duì)象。NodeList對(duì)象是一種類(lèi)數(shù)組對(duì)象,用于保存一組有序的節(jié)點(diǎn),可以通過(guò)位置來(lái)訪問(wèn)這些節(jié)點(diǎn)。
hasChildNodes():這個(gè)方法在節(jié)點(diǎn)包含一個(gè)或多個(gè)子節(jié)點(diǎn)的情況下返回true。
ownerDocument:該屬性指向表示整個(gè)文檔的文檔節(jié)點(diǎn)。
// 將NodeList對(duì)象轉(zhuǎn)換為數(shù)組 var arrayOfNodes = Array.prototype.slice.call(someNode.childNodes,0);
兼容性:IE8以及更早版本將NodeList實(shí)現(xiàn)為一個(gè)COM對(duì)象,因此上面的代碼會(huì)導(dǎo)致錯(cuò)誤。
Note:NdoeList對(duì)象的特殊之處在于,它實(shí)際上是基于DOM結(jié)構(gòu)動(dòng)態(tài)執(zhí)行查詢的結(jié)果,因此DOM的變化能直接反映在NodeList對(duì)象之中。它是有生命的對(duì)象,而不是在我們第一次訪問(wèn)它在某一個(gè)瞬間拍下的快照。
操作節(jié)點(diǎn)appendChild():用于向childNodes列表的末尾添加一個(gè)節(jié)點(diǎn)。返回新增的節(jié)點(diǎn)。
insertBefore():接收兩個(gè)參數(shù):要插入的節(jié)點(diǎn)和作為參照的節(jié)點(diǎn)。插入節(jié)點(diǎn)后,被插入的節(jié)點(diǎn)會(huì)變成參照節(jié)點(diǎn)的前一個(gè)同胞節(jié)點(diǎn)。同時(shí)被方法返回。
replaceChild():接收兩個(gè)參數(shù):要插入的節(jié)點(diǎn)和要替換的節(jié)點(diǎn)。要替換的節(jié)點(diǎn)將由這個(gè)方法返回并從文檔樹(shù)中移除。同時(shí)由要插入的節(jié)點(diǎn)占據(jù)其位置。
removeChild():接收一個(gè)參數(shù),即要移除的節(jié)點(diǎn)。返回被移除的節(jié)點(diǎn)。
這四個(gè)方法都是操作的某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),也就是說(shuō),要使用這幾個(gè)方法必須先取得父節(jié)點(diǎn)。另外并不是所有節(jié)點(diǎn)都有子節(jié)點(diǎn),如果在不支持子節(jié)點(diǎn)的節(jié)點(diǎn)上,調(diào)用了這些方法,將會(huì)導(dǎo)致錯(cuò)誤。
Note:
如果傳入到appendChild()中的節(jié)點(diǎn)已經(jīng)是文檔的一部分,那結(jié)果就是將該節(jié)點(diǎn)從原來(lái)的位置轉(zhuǎn)移到新位置。即可以將DOM樹(shù)看成是由一系列指針連接起來(lái)的,但任何DOM節(jié)點(diǎn)也不能同時(shí)出現(xiàn)在文檔中的多個(gè)位置上。
在使用replaceChild()插入一個(gè)節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)的關(guān)系指針都會(huì)從被它替換的節(jié)點(diǎn)復(fù)制過(guò)來(lái)。從技術(shù)上來(lái)講,被替換的節(jié)點(diǎn)仍然還在文檔中,但它在文檔中已經(jīng)沒(méi)有了自己的位置。同樣的,removeChild()移除的節(jié)點(diǎn)也同樣為文檔所有,只不過(guò)在文檔中已經(jīng)沒(méi)有了自己的位置。
其他方法有兩個(gè)方法是所有類(lèi)型節(jié)點(diǎn)都要的。
cloneNode():用于創(chuàng)建調(diào)用這個(gè)方法的節(jié)點(diǎn)的一個(gè)完全相同的副本。接收一個(gè)布爾值參數(shù),true:表示執(zhí)行深復(fù)制,也就是復(fù)制節(jié)點(diǎn)以及整個(gè)子節(jié)點(diǎn)樹(shù)。false:表示執(zhí)行淺復(fù)制,即只復(fù)制節(jié)點(diǎn)本身。
Note:
deepList.childNodes.length中的差異主要是因?yàn)镮E8以及更早版本與其他瀏覽器處理空白字符的方式不一樣。IE9以及之前版本不會(huì)為空白符創(chuàng)建節(jié)點(diǎn)。
cloneNode()方法不會(huì)復(fù)制添加到DOM節(jié)點(diǎn)中的Javascript屬性,例如事件處理程序等。這個(gè)方法只復(fù)制特性,在明確指定的情況下也復(fù)制子節(jié)點(diǎn),其他一切都不會(huì)復(fù)制。IE在此存在一個(gè)bug,即它會(huì)復(fù)制事件處理程序,所以建議,在復(fù)制之前最好先移除事件處理程序。
normalize():處理文檔樹(shù)種的文本節(jié)點(diǎn)。
Document類(lèi)型--nodeType=9Javascript通過(guò)Document類(lèi)型表示文檔。HTMLDocument繼承自Document類(lèi)型
1.document對(duì)象是HTMLDocument對(duì)象的實(shí)例
2.document對(duì)象是window對(duì)象的一個(gè)屬性,可以將其作為全局對(duì)象進(jìn)行訪問(wèn)。
document instanceof HTMLDocument //true HTMLDocument.__proto__ ==== Document //true
document作為我們操作文檔的一個(gè)公共接口存在。
document信息document.URL:包含頁(yè)面完整的URL
document.domain:包含頁(yè)面的域名
document.referrer:保存著鏈接到當(dāng)前頁(yè)面的那個(gè)頁(yè)面的URL
在這三個(gè)屬性中只有domain是可以設(shè)置的。但由于安全方面的限制,也并非可以給domain設(shè)置任何值。
不能將這個(gè)屬性設(shè)置為URL中不包含的域
如果域名一開(kāi)始是松散的,那么不能將它設(shè)置為緊繃的。
// 假設(shè)頁(yè)面來(lái)自p2p.wrox.com域 document.domain = "wrox.com"; // 松散的,成功 document.domain = "nczonline.ne4t" // 出錯(cuò) document.domain = "p2p.wrox.com" // 緊繃的,出錯(cuò)
document.readyState:有兩個(gè)可能的值(HTML5新增)
loading:正在加載文檔
complete:已經(jīng)加載完文檔
document.compatMode:這個(gè)屬性的作用是告訴開(kāi)發(fā)人員瀏覽器采用了那些渲染模式(HTML5新增)
值等于"CSS1Compat",表明瀏覽器采用標(biāo)準(zhǔn)模式進(jìn)行渲染
值等于"BackCompat",表明瀏覽器在混雜模式下進(jìn)行渲染
document子節(jié)點(diǎn)document.documentElement:獲得html元素的引用
document.body:獲得body元素的引用
document.head:獲得head元素的引用(HTML5新增)
document.title:包含title元素的中的文本
document.activeElement:這個(gè)屬性始終會(huì)引用DOM中當(dāng)前獲得了焦點(diǎn)的元素(HTML5新增)
Browser compatibility-head
Browser compatibility-activeElement
Document類(lèi)型為查元素提供了兩種方法,1,2
HTMLDocument類(lèi)型提供了方法,3
document.getElementById()
document.getElementsByName:這個(gè)方法會(huì)返回帶有給定name特性的元素,最常用于取得單選按鈕。同樣也返回 HTMLCollection對(duì)象。
HTMLCollection對(duì)象,可以通過(guò)length屬性訪問(wèn)元素長(zhǎng)度,通過(guò)[]方括號(hào)語(yǔ)法訪問(wèn)對(duì)象中的項(xiàng)。方括號(hào)中既可以是數(shù)字也可以是字符串的索引值。
創(chuàng)建節(jié)點(diǎn)document.createElement():接收一個(gè)參數(shù),即要?jiǎng)?chuàng)建元素的標(biāo)簽名。
document.createTextNode():接收一個(gè)參數(shù),要插入節(jié)點(diǎn)中的文本。
這些集合都是HTMLCollection對(duì)象
document.anchors:包含文檔中帶name特性的>元素
document.forms:包含文檔中所有的
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/78774.html
摘要:是文檔的一種表示結(jié)構(gòu)。這些任務(wù)大部分都是基于它。這個(gè)實(shí)踐的重點(diǎn)是把你在前端練級(jí)攻略第部分中學(xué)到的一些東西和結(jié)合起來(lái)。一旦你進(jìn)入框架部分,你將更好地理解并使用它們。到目前為止,你一直在使用進(jìn)行操作。它是在前端系統(tǒng)像今天這樣復(fù)雜之前編寫(xiě)的。 本文是 前端練級(jí)攻略 第二部分,第一部分請(qǐng)看下面: 前端練級(jí)攻略(第一部分) 在第二部分,我們將重點(diǎn)學(xué)習(xí) JavaScript 作為一種獨(dú)立的語(yǔ)言,如...
摘要:定義一個(gè)組件可以在其他組件中調(diào)用這個(gè)組件調(diào)用組件劉宇組件插入內(nèi)容在上面的案例中可以看到吧寫(xiě)到當(dāng)中,這種寫(xiě)法稱為。 React初識(shí) React是Facebook推出的一個(gè)javascript庫(kù)(用來(lái)創(chuàng)建用戶界面的Javascript庫(kù)),所以他只是和用戶的界面打交道,你可以把它看成MVC中的V(視圖)這一層。 組件 React的一切都是基于組件的。web世界的構(gòu)成是基于各種HTML標(biāo)簽的...
摘要:一般來(lái)說(shuō),聲明式編程關(guān)注于發(fā)生了啥,而命令式則同時(shí)關(guān)注與咋發(fā)生的。聲明式編程可以較好地解決這個(gè)問(wèn)題,剛才提到的比較麻煩的元素選擇這個(gè)動(dòng)作可以交托給框架或者庫(kù)區(qū)處理,這樣就能讓開(kāi)發(fā)者專注于發(fā)生了啥,這里推薦一波與。 本文翻譯自FreeCodeCamp的from-zero-to-front-end-hero-part。 繼續(xù)譯者的廢話,這篇文章是前端攻略-從路人甲到英雄無(wú)敵的下半部分,在...
摘要:有級(jí)級(jí)級(jí)共個(gè)級(jí)別。事件類(lèi)型事件類(lèi)型鼠標(biāo)事件鍵盤(pán)事件事件事件處理器執(zhí)行代碼的程序在事件發(fā)生時(shí)會(huì)對(duì)事件做出響應(yīng)。在標(biāo)簽中使用事件處理器的語(yǔ)法是標(biāo)簽事件處理器代碼事件處理程序事件就是用戶或?yàn)g覽器自身執(zhí)行的某種動(dòng)作。 DOM介紹 D(文檔)可以理解為整個(gè)Web加載的網(wǎng)頁(yè)文檔,O(對(duì)象)可以理解為類(lèi)似window對(duì)象只來(lái)的東西,可以調(diào)用屬性和方法,這里我們說(shuō)的是document對(duì)象,M(模型)可...
摘要:事件處理允許對(duì)事件做出反應(yīng)。還可以用代碼為多個(gè)元素分配相同的事件。指定事件監(jiān)聽(tīng)器接下來(lái)看看怎樣為元素分配事件監(jiān)聽(tīng)器。 翻譯:瘋狂惡的技術(shù)宅https://medium.freecodecamp.o... 本文首發(fā)微信公眾號(hào):jingchengyideng歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 Javascript DOM(文檔對(duì)象模型)是一個(gè)允許開(kāi)發(fā)人員操縱頁(yè)面內(nèi)容、結(jié)構(gòu)和風(fēng)...
閱讀 2788·2023-04-26 01:47
閱讀 3597·2023-04-25 23:45
閱讀 2472·2021-10-13 09:39
閱讀 612·2021-10-09 09:44
閱讀 1799·2021-09-22 15:59
閱讀 2770·2021-09-13 10:33
閱讀 1723·2021-09-03 10:30
閱讀 662·2019-08-30 15:53