DOM
描述
- DOM表示文件物件模型
- DOM是獨立於任何語言的
- DOM是用於操作HTML頁面的內容(文字、影象、等等...)、結構(元素標籤)和樣式(CSS屬性)
引入JavaScript檔案
- 可以在html頁面新增JavaScript程式碼
-
方式分為:
-
內嵌樣式:可以在
<head>
元素 中使用<script>
元素(閉合元素)在裡面書寫JS程式碼-
內嵌樣式存在的問題:
- 由於將
<script>
元素 寫在html頁面元素上面時,瀏覽器會先執行JavaScript程式碼,在執行html程式碼。 會導致JavaScript程式碼中對html程式碼修改的內容無法顯示(html程式碼還沒有被執行) - 解決問題:
window.onload = function() { }
機制 將先執行html程式碼,後執行JS程式碼
- 由於將
-
- 內嵌樣式的另一種方式:可以在
<body>
元素 中使用<script>
元素(閉合元素)“建議寫在最後面” - 外聯樣式:可以在
<script>
元素 新增 src屬性 來引入JavaScript檔案
-
Document物件
描述
- 表示為JavaScript程式碼提供了一個訪問HTML頁面的橋樑
- 並且提供了訪問和修改頁面內容的屬性和方法
Document物件獲取頁面元素
-
Document物件提供了可以獲取頁面元素的方法
- getElementById()方法
- getElementsByName()方法
- getElementsByTagName()方法
- getElementsByClassName()方法
- querySelector()方法
- querySelectorAll()方法
getElementById()方法
- 以查詢 ID屬性 的方式來定位指定元素的位置
- 由於 ID屬性 的唯一性,得到的元素只能有一個
<body>
<p id="p1">獲取有ID屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<!-- 通過<script>元素來書寫JavaScript程式碼 -->
<script>
/*
getElementById()方法
* 以查詢 ID屬性 的方式來定位指定元素的位置
* 由於 ID屬性 的唯一性,得到的元素只能有一個
*/
var s1 = document.getElementById( 'p1' );
console.log( s1 );// 顯示 <p id="p1">獲取有ID屬性的元素</p>
</script>
</body>
getElementsByName()方法
- 以查詢 name屬性 的方式來定位指定元素的位置
- 會得到全部帶有 name屬性 的元素,以類陣列表示得到的元素( NodeList型別 )
<body>
<p id="p1">獲取有ID屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<!-- 通過<script>元素來書寫JavaScript程式碼 -->
<script>
/*
getElementsByName()方法
* 以查詢 name屬性 的方式來定位指定元素的位置
* 會得到全部帶有 name屬性 的元素,以類陣列表示得到的元素( NodeList型別 )
*/
var s2 = document.getElementsByName( 'p2' );
console.log( s2 );// 顯示 NodeList(3) [p, p, p]
</script>
</body>
getElementsByClassName()方法
- 以查詢 class屬性值 的方式來定位指定元素的位置
- 會得到全部帶有 class屬性 的元素,以類陣列表示得到的元素( HTMLCollection型別 )
<body>
<p id="p1">獲取有ID屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<!-- 通過<script>元素來書寫JavaScript程式碼 -->
<script>
/*
getElementsByClassName()方法
* 以查詢 class屬性值 的方式來定位指定元素的位置
* 會得到全部帶有 class屬性 的元素,以類陣列表示得到的元素( HTMLCollection型別 )
*/
var s3 = document.getElementsByClassName( 'p3' );
console.log( s3 );// 顯示 HTMLCollection(3) [p.p3, p.p3, p.p3]
</script>
</body>
getElementsByTagName()方法
- 以查詢 元素名 的方式來定位指定元素的位置
- 會得到全部 被指定的元素,以類陣列表示得到的元素( HTMLCollection型別 )
<body>
<p id="p1">獲取有ID屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<!-- 通過<script>元素來書寫JavaScript程式碼 -->
<script>
/*
getElementsByTagName()方法
* 以查詢 元素名 的方式來定位指定元素的位置
* 會得到全部 被指定的元素,以類陣列表示得到的元素( HTMLCollection型別 )
*/
var s4 = document.getElementsByTagName( 'p' );
console.log( s4 );// 顯示 HTMLCollection(7) [p#p1, p, p, p, p.p3, p.p3, p.p3, p1: p#p1, p2: p]
</script>
</body>
querySelector()方法
- 以查詢 對應的CSS選擇器 的方式來定位指定元素的位置
- 會得到 第一個對應該CSS選擇器 的元素 - 只有一個
<body>
<p id="p1">獲取有ID屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<!-- 通過<script>元素來書寫JavaScript程式碼 -->
<script>
/*
querySelector()方法
* 以查詢 對應的CSS選擇器 的方式來定位指定元素的位置
* 會得到 第一個對應該CSS選擇器 的元素 - 只有一個
*/
var s5 = document.querySelector( '#p1' );
console.log( s5 );// 顯示 <p id="p1">獲取有ID屬性的元素</p>
</script>
</body>
querySelectorAll()方法
- 以查詢 對應的CSS選擇器 的方式來定位指定元素的位置
- 會得到 對應該CSS選擇器 的全部元素,以類陣列表示得到的元素( NodeList型別 )
<body>
<p id="p1">獲取有ID屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p name= "p2" >獲取有Name屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<p class="p3">獲取有Class屬性的元素</p>
<!-- 通過<script>元素來書寫JavaScript程式碼 -->
<script>
/*
querySelectorAll()方法
* 以查詢 對應的CSS選擇器 的方式來定位指定元素的位置
* 會得到 對應該CSS選擇器 的全部元素,以類陣列表示得到的元素( NodeList型別 )
*/
var s6 = document.querySelectorAll( '.p3' );
console.log( s6 );// 顯示 NodeList(3) [p.p3, p.p3, p.p3]
</script>
</body>
Document物件建立頁面節點
-
可以使用Document物件提供的屬性或方法來在html頁面中建立新節點
- createElement()方法
- createTextNode()方法
- createAttribute()方法
createElement()方法
- 用於建立新的元素節點
<body>
<script>
/* 建立一個<p>元素 */
var p = document.createElement( 'p' );
/* 根據DOM節點樹的關係將建立的新元素新增到HTML頁面程式碼中 */
/* 獲取建立新元素的父級節點 */
var body = document.body;
/* 將新建立的元素節點做為指定父級節點的子級節點進行新增 - 通過appendChild()方法進行新增 */
body.appendChild( p );
</script>
</body>
createTextNode()方法
- 用於建立新的文字節點
<body>
<script>
/* 建立一個<p>元素 */
var p = document.createElement( 'p' );
/* 為新建立的元素節點新增文字節點 */
var text = document.createTextNode( '建立文字節點' );
/*
根據DOM節點樹的關係
* 將建立的元素節點新增到HTML頁面程式碼中
* 將建立的文字節點新增到指定元素節點中
*/
/* 獲取建立新元素的父級節點 */
var body = document.body;
/* 將建立的文字節點新增到指定的元素節點中 - 通過appendChild()方法進行新增 */
p.appendChild( text );
/* 將新建立的元素節點做為指定父級節點的子級節點進行新增 - 通過appendChild()方法進行新增 */
body.appendChild( p );
</script>
</body>
createAttribute()方法
-
用於建立屬性節點
- 注意:該方法只能接收一個引數,做為屬性節點的屬性名,屬性值使用 nodeValue 建立
<body>
<script>
/* 建立一個<p>元素 */
var p = document.createElement( 'p' );
/* 為新建立的元素節點新增文字節點 */
var text = document.createTextNode( '建立文字節點' );
/* 為新建立的元素節點新增屬性節點 */
var attr = document.createAttribute( 'id' );
/* 為屬性節點新增屬性值 */
attr.nodeValue = 'p1';
/*
根據DOM節點樹的關係
* 將建立的元素節點新增到HTML頁面程式碼中
* 將建立的文字節點新增到指定元素節點中
* 將建立的屬性節點新增到指定元素節點中
*/
/* 獲取建立新元素的父級節點 */
var body = document.body;
/* 將建立的文字節點新增到指定的元素節點中 - 通過appendChild()方法進行新增 */
p.appendChild( text );
/* 將建立的屬性節點新增到指定的元素節點中 - 通過setAttributeNode()方法進行新增 */
p.setAttributeNode( attr );
/* 將新建立的元素節點做為指定父級節點的子級節點進行新增 - 通過appendChild()方法進行新增 */
body.appendChild( p );
</script>
</body>
類陣列物件
- 在使用JavaScript程式碼對html頁面中的元素進行定位置並顯示元素資料內容時,會將資料內容集合到一個相似陣列的 “類陣列物件”
-
類陣列分為
-
HTMLCollection型別
- 動態集合
- 是一個元素的集合(html的標籤)
- 會根據HTML元素變化而變化
-
NodeList型別
- 靜態集合
- 是一個節點的集合(節點指元素節點、屬性節點及文字節點)
- 不會根據HTML元素變化而變化
-
<body>
<p class="p" id="p1">獲取有Class屬性的元素</p>
<p class="p">獲取有Class屬性的元素</p>
<p class="p">獲取有Class屬性的元素</p>
<p class="p">獲取有Class屬性的元素</p>
<p class="p">獲取有Class屬性的元素</p>
<script>
/* 獲取頁面的body元素 */
var body = document.body;
/* 動態集合 - HTMLCollection */
/* 通過指定類名獲取指定資料 */
var pclass1 = document.getElementsByClassName( 'p' );
console.log( pclass1 );// 顯示 HTMLCollection(5) [p.p3, p.p3, p.p3, p.p3, p.p3]
/* 獲取類陣列長度 */
console.log( pclass1.length );// 顯示 5
/* 通過指定ID獲取指定資料 */
var p1 = document.getElementById( 'p1' );
/* 刪除指定節點中的子級節點 */
body.removeChild( p1 );
/* 獲取類陣列長度 */
console.log( pclass1.length );// 顯示 4
/* 靜態集合 - NodeList */
/* 通過CSS選擇器獲取指定資料 */
var pclass2 = document.querySelectorAll( '.p' );
console.log( pclass2 );// 顯示 NodeList(5) [p.p3, p.p3, p.p3, p.p3, p.p3]
/* 獲取類陣列長度 */
console.log( pclass2.length );// 顯示 5
/* 通過CSS選擇器獲取指定資料 */
var p2 = document.querySelector( '.p' );
/* 刪除指定節點中的子級節點 */
body.removeChild( p2 );
/* 獲取類陣列長度 */
console.log( pclass2.length );// 顯示 5
</script>
</body>