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