摘要:基本介紹文檔對象模型是和文檔的編程接口。提供了一系列的方法可以進行元素的增刪改查操作查詢元素方法返回匹配指定屬性的元素節(jié)點。返回值是一個對象,也就是說,搜索結(jié)果是一個動態(tài)集合,任何元素的變化都會實時反映在返回的集合中。刪除指定的類值。
1基本介紹
文檔對象模型 (DOM) 是HTML和XML文檔的編程接口。它給文檔(結(jié)構(gòu)樹)提供了一個結(jié)構(gòu)化的表述并且定義了一種方式—程序可以對結(jié)構(gòu)樹進行訪問,以改變文檔的結(jié)構(gòu),樣式和內(nèi)容。
DOM 提供了一種表述形式將文檔作為一個結(jié)構(gòu)化的節(jié)點組以及包含屬性和方法的對象。從本質(zhì)上說,它將web 頁面和腳本或編程語言連接起來了。
從以上論述,我們大概知道:
文檔對象模型是HTML和XML文檔的編程接口(將web頁面和腳本連接了起來);
提供了一種表述形式將文檔作為一個結(jié)構(gòu)化的節(jié)點組以及包含屬性和方法的對象;
為測試方便,先構(gòu)建一個結(jié)構(gòu)樹
document對象每個載入瀏覽器的HTML文檔都會成為document對象。document對象包含了文檔的基本信息,我們可以通過JavaScript對HTML頁面中的所有元素進行訪問、修改。
document對象具有一些常用的屬性:
doctype屬性
在書寫HTML文檔的時候第一句一般都是doctype聲明,可以通過document對象獲取,沒有則返回null;
head、body屬性
通過訪問documen的head屬性或者body屬性來獲得文檔樹的head節(jié)點,以及body節(jié)點,這兩個節(jié)點都是包括該元素的字節(jié)點的;
activeElement屬性
activeElement屬性返回當前文檔中獲得焦點的那個元素。
用戶通??梢允褂胻ab鍵移動焦點,使用空格鍵激活焦點,比如如果焦點在一個鏈接上,此時按一下空格鍵,就會跳轉(zhuǎn)到該鏈接
documentURI、domain、lastModified三個屬性
1.documentURI屬性返回當前文檔的網(wǎng)址
2.domain屬性返回文檔域名
3.lastModified返回當前文檔的最后修改時間
location屬性
location屬性返回一個只讀對象,提供了當前文檔的URL信息
title、characterSet屬性
title屬性返回當前文檔的標題,該屬性是可寫的
characterSet屬性返回渲染當前文檔的字符集
readyState
readyState屬性返回當前文檔的狀態(tài),共有三種可能的值
loading:加載HTML代碼階段,尚未完成解析
interactive:加載外部資源階段
complete:全部加載完成
compatMode
compatMode屬性返回瀏覽器處理文檔的模式,可能的值為
BackCompat:向后兼容模式,也就是沒有添加DOCTYPE
CSS1Compat:嚴格模式,添加了DOCTYPE
cookie
cookie是存儲在客戶端的文本;
innerText
innerText是一個可寫屬性,返回元素內(nèi)包含的文本內(nèi)容,在多層次的時候會按照元素由淺到深的順序拼接其內(nèi)容;
以之前構(gòu)建的文檔樹為例,,返回了id為purchase元素節(jié)點下的文本內(nèi)容.
innerHTML、outerHTML屬性
innerHTML屬性作用和innerText類似,但是不是返回元素的文本內(nèi)容,而是返回元素的HTML結(jié)構(gòu),在寫入的時候也會自動構(gòu)建DOM;
outerHTML 返回內(nèi)容還包括本身;
待補充.......................
2Element對象除了document對象,在DOM中最常用的就是Element對象了,Element對象表示HTML元素。
DOM提供了一系列的方法可以進行元素的增、刪、改、查操作;
查詢元素
getElementById()
getElementById方法返回匹配指定ID屬性的元素節(jié)點。如果沒有發(fā)現(xiàn)匹配的節(jié)點,則返回null。這也是獲取一個元素最快的方法
getElementsByClassName()
getElementsByClassName方法返回一個類似數(shù)組的對象(HTMLCollection類型的對象),包括了所有class名字符合指定條件的元素(搜索范圍包括本身),元素的變化實時反映在返回結(jié)果中。這個方法不僅可以在document對象上調(diào)用,也可以在任何元素節(jié)點上調(diào)用。
getElementsByClassName方法的參數(shù),可以是多個空格分隔的class名字,返回同時具有這些節(jié)點的元素。
getElementsByTagName()
getElementsByTagName方法返回所有指定標簽的元素(搜索范圍包括本身)。返回值是一個HTMLCollection對象,也就是說,搜索結(jié)果是一個動態(tài)集合,任何元素的變化都會實時反映在返回的集合中。這個方法不僅可以在document對象上調(diào)用,也可以在任何元素節(jié)點上調(diào)用。
getElementsByName()
getElementsByName方法用于選擇擁有name屬性的HTML元素,比如form、img、frame、embed和object,返回一個NodeList格式的對象,不會實時反映元素的變化。
以下兩種方法要考慮兼容性的問題
querySelector()
querySelector方法返回匹配指定的CSS選擇器的元素節(jié)點。如果有多個節(jié)點滿足匹配條件,則返回第一個匹配的節(jié)點。如果沒有發(fā)現(xiàn)匹配的節(jié)點,則返回null。
querySelector方法無法選中CSS偽元素。
querySelectorAll()
querySelectorAll方法返回匹配指定的CSS選擇器的所有節(jié)點,返回的是NodeList類型的對象。NodeList對象不是動態(tài)集合,所以元素節(jié)點的變化無法實時反映在返回結(jié)果中。
創(chuàng)建元素
createElement()
createElement方法用來生成HTML元素節(jié)點。
createElement方法的參數(shù)為元素的標簽名,即元素節(jié)點的tagName屬性。如果傳入大寫的標簽名,會被轉(zhuǎn)為小寫。如果參數(shù)帶有尖括號(即<和>)或者是null,會報錯。
createTextNode()
createTextNode方法用來生成文本節(jié)點,參數(shù)為所要生成的文本節(jié)點的內(nèi)容。
createDocumentFragment()
createDocumentFragment方法生成一個DocumentFragment對象。
DocumentFragment對象是一個存在于內(nèi)存的DOM片段,但是不屬于當前文檔,常常用來生成較復(fù)雜的DOM結(jié)構(gòu),然后插入當前文檔。這樣做的好處在于,因為DocumentFragment不屬于當前文檔,對它的任何改動,都不會引發(fā)網(wǎng)頁的重新渲染,比直接修改當前文檔的DOM有更好的性能表現(xiàn)。
修改元素
appendChild()
在元素末尾添加元素
insertBefore()
在某個元素之前插入元素
replaceChild()
replaceChild()接受兩個參數(shù):要插入的元素和要替換的元素
刪除元素
刪除元素使用removeChild()方法即可
clone元素
cloneNode()方法用于克隆元素,方法有一個布爾值參數(shù),傳入true的時候會深復(fù)制,也就是會復(fù)制元素及其子元素(IE還會復(fù)制其事件),false的時候只復(fù)制元素本身
屬性操作
getAttribute()
getAttribute()用于獲取元素的attribute值
createAttribute()
createAttribute()方法生成一個新的屬性對象節(jié)點,并返回它。
createAttribute方法的參數(shù)name,是屬性的名稱。
setAttribute()
setAttribute()方法用于設(shè)置元素屬性
romoveAttribute()
removeAttribute()用于刪除元素屬性
element.attributes
當然上面的方法做的事情也可以通過類操作數(shù)組屬性element.attributes來實現(xiàn)
題目1: dom對象的innerText和innerHTML有什么區(qū)別?
dom對象的innerText和innerHTML屬性一個是輸出元素節(jié)點的文本,一個是輸出該節(jié)點下的HTML結(jié)構(gòu),差異可以通過以下實例驗證:
題目2: elem.children和elem.childNodes的區(qū)別?
elem.children 和elem.childNodes區(qū)別在于:
elem.children主要返回的是當前元素節(jié)點的所有子元素節(jié)點;
elem.childNodes主要返回的是當前元素節(jié)點的所有子節(jié)點(包括元素節(jié)點,屬性節(jié)點以及文本節(jié)點);
題目3:查詢元素有幾種常見的方法?ES5的元素選擇方法是什么?
查詢元素有3種常見的方法
element.getElementById()方法
返回匹配指定的ID屬性的元素節(jié)點;
element.getElementsByClassName()方法
返回HTML collection類型的對象,該對象形式類似于數(shù)組,包括了所有class名字符合匹配條件的元素(搜索范圍包括本身),該方法不僅可以在document對象上使用,也可以在任意的元素節(jié)點上使用;
element.getElementsByTagName()方法
返回所有指定標簽的元素(搜索范圍包括本身),返回值為HTML Collection 對象,該方法不僅在document對象中調(diào)用,而且可以在任意的元素節(jié)點上調(diào)用;
element.getElementsByName()方法
該方法用于選擇具有name屬性的HTML元素,返回一個NodeLIst格式的對象,不會實時反映元素的變化;
ES5的元素選擇方法為:
querySelectot()
該方法返回匹配指定的css選擇器的元素節(jié)點,如果有多個元素節(jié)點滿足條件,則返回匹配到的第一個元素節(jié)點;
querySelectorAll()
該方法返回匹配指定的css選擇器的所有節(jié)點,返回的是NodeList類型的對象;
題目4:如何創(chuàng)建一個元素?如何給元素設(shè)置屬性?如何刪除屬性
創(chuàng)建元素: 通過createElement()方法來生成HTML元素節(jié)點;
設(shè)置屬性: 通過setAttribute()方法用于設(shè)置元素屬性;
刪除屬性: 通過removeAttribute()方法來刪除元素屬性;
題目5:如何給頁面元素添加子元素?如何刪除頁面元素下的子元素?
通過元素的appendChild()方法給元素添加子元素,添加到元素末尾。
通過元素的removeChild()方法刪除元素的子元素。
題目6: element.classList有哪些方法?如何判斷一個元素的 class 列表中是包含某個 class?如何添加一個class?如何刪除一個class?
add( String [, String] ) 添加指定的類值。如果這些類已經(jīng)存在于元素的屬性中,那么它們將被忽略。
remove( String [,String] ) 刪除指定的類值。
item ( Number )按集合中的索引返回class值。
toggle ( String [, force] ) 當只有一個參數(shù)時:切換 class value; 即如果類存在,則刪除它并返回false,如果不存在,則添加它并返回true。
當存在第二個參數(shù)時:如果第二個參數(shù)的計算結(jié)果為true,則添加指定的類值,如果計算結(jié)果為false,則刪除它
contains( String ) 檢查元素的類屬性中是否存在指定的類值。
使用contains方法判斷一個元素的class中是否包含某個class。add添加一個class,remove刪除一個class。
題目7: 如何選中如下代碼所有的li元素? 如何選中btn元素?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/83939.html
摘要:的一個突出特點是擁有極速地渲染性能。該功能依靠的就是研發(fā)團隊弄出的虛擬機制以及其獨特的算法。在的算法下,在同一位置對比前后節(jié)點只要發(fā)現(xiàn)不同,就會刪除操作前的節(jié)點包括其子節(jié)點,替換為操作后的節(jié)點。 React的一個突出特點是擁有極速地渲染性能。該功能依靠的就是facebook研發(fā)團隊弄出的虛擬dom機制以及其獨特的diff算法。下面簡單解釋一下react虛擬dom機制和diff算法的實現(xiàn)...
摘要:界面上的更改都是通過操作實現(xiàn)的,并不是通過傳統(tǒng)的刷新頁面實現(xiàn)的。操作優(yōu)化的總原則是盡量減少操作。通過在文檔片段上進行操作,可以降低操作對頁面性能的影響,這種方式是創(chuàng)建一個文檔片段,并在此片段上進行必要的操作,操作完成后將它附加在頁面中。 界面上UI的更改都是通過DOM操作實現(xiàn)的,并不是通過傳統(tǒng)的刷新頁面實現(xiàn) 的。盡管DOM提供了豐富接口供外部調(diào)用,但DOM操作的代價很高,頁面前端代碼的...
摘要:比較虛擬與的差異,以及對節(jié)點的操作,其實就是樹的差異比較,就是對樹的節(jié)點進行替換。忽略掉這種特殊的情況后,大膽的修改了算法按直系兄弟節(jié)點比較比較。這當中對比的細節(jié)才是整個算法最精粹的地方。 一、舊社會的頁面渲染 ???????在jQuery橫行的時代,F(xiàn)Eer們,通過各種的方式去對頁面的DOM進行操作,計算大小,變化,來讓頁面生動活潑起來,豐富的DOM操作,讓一個表面簡單的頁面能展示出...
摘要:摘要想稍微系統(tǒng)的說說對于的操作把和常用操作的內(nèi)容歸納成思維導(dǎo)圖方便閱讀同時加入性能上的一些問題前言在前端開發(fā)的過程中極為重要的一個功能就是對對象的操作無論增刪改查在前端頁面操作這一范圍內(nèi)都是比較消耗性能的如何高效率的便捷的操作這就是本文要講 摘要 想稍微系統(tǒng)的說說對于DOM的操作,把Javascript和jQuery常用操作DOM的內(nèi)容歸納成思維導(dǎo)圖方便閱讀,同時加入性能上的一些問題....
閱讀 2269·2021-11-15 11:38
閱讀 1218·2021-09-06 15:02
閱讀 3475·2021-08-27 13:12
閱讀 1462·2019-08-30 14:20
閱讀 2460·2019-08-29 15:08
閱讀 710·2019-08-29 14:08
閱讀 1776·2019-08-29 13:43
閱讀 1572·2019-08-26 12:11