2021.8.6今日小結
今天重新瞭解了DOM,什麼是DOM就是一個文件物件模型,怎麼來操作DOM,怎麼來查詢DOM,然後如何修改DOM。利用JavaScript程式碼來進行頁面元素的修改。做出一個點選切換圖片的修改,一個全選和全不選的小功能。
什麼是DOM
Document Object Model
文件物件模型,通過DOM可以來任意來修改網頁中各個內容
文件
文件指的是網頁,一個網頁就是一個文件
物件
物件指將網頁中的每一個節點都轉換為物件
轉換完物件以後,就可以以一種純面向物件的形式來操作網頁了
模型
模型用來表示節點和節點之間的關係,方便操作頁面
節點(Node)
節點是構成網頁的最基本的單元,網頁中的每一個部分都可以稱為是一個節點
雖然都是節點,但是節點的型別卻是不同的
常用的節點
文件節點 (Document),代表整個網頁
元素節點(Element),代表網頁中的標籤
屬性節點(Attribute),代表標籤中的屬性
文字節點(Text),代表網頁中的文字內容
DOM操作
DOM查詢
在網頁中瀏覽器已經為我們提供了document物件,
它代表的是整個網頁,它是window物件的屬性,可以在頁面中直接使用。
document查詢方法:
根據元素的id屬性查詢一個元素節點物件:
document.getElementById("id屬性值");
根據元素的name屬性值查詢一組元素節點物件:
document.getElementsByName("name屬性值");
根據標籤名來查詢一組元素節點物件:
document.getElementsByTagName("標籤名");
元素的屬性:
讀取元素的屬性:
語法:元素.屬性名
例子:ele.name
ele.id
ele.value
ele.className
修改元素的屬性:
語法:元素.屬性名 = 屬性值
innerHTML
使用該屬性可以獲取或設定元素內部的HTML程式碼
事件(Event)
事件指的是使用者和瀏覽器之間的互動行為。比如:點選按鈕、關閉視窗、滑鼠移動。。。
我們可以為事件來繫結回撥函式來響應事件。
繫結事件的方式:
1.可以在標籤的事件屬性中設定相應的JS程式碼
例子:
<button onclick="js程式碼。。。">按鈕</button>
2.可以通過為物件的指定事件屬性設定回撥函式的形式來處理事件
例子:
<button id="btn">按鈕</button>
<script>
var btn = document.getElementById("btn");
btn.onclick = function(){
};
</script>
文件的載入
瀏覽器在載入一個頁面時,是按照自上向下的順序載入的,載入一行執行一行。
如果將js程式碼編寫到頁面的上邊,當代碼執行時,頁面中的DOM物件還沒有載入,
此時將會無法正常獲取到DOM物件,導致DOM操作失敗。
解決方式一:
可以將js程式碼編寫到body的下邊
<body>
<button id="btn">按鈕</button>
<script>
var btn = document.getElementById("btn");
btn.onclick = function(){
};
</script>
</body>
解決方式二:
將js程式碼編寫到window.onload = function(){}中
window.onload 對應的回撥函式會在整個頁面載入完畢以後才執行,
所以可以確保程式碼執行時,DOM物件已經載入完畢了
<script>
window.onload = function(){
var btn = document.getElementById("btn");
btn.onclick = function(){
};
};
</script>
怎麼DOM查詢
通過具體的元素節點來查詢
元素.getElementsByTagName()
通過標籤名查詢當前元素的指定後代元素
元素.childNodes
獲取當前元素的所有子節點
會獲取到空白的文字子節點
元素.children
獲取當前元素的所有子元素
元素.firstChild
獲取當前元素的第一個子節點
元素.lastChild
獲取當前元素的最後一個子節點
元素.parentNode
獲取當前元素的父元素
元素.previousSibling
獲取當前元素的前一個兄弟節點
元素.nextSibling
獲取當前元素的後一個兄弟節點
innerHTML和innerText
這兩個屬性並沒有在DOM標準定義,但是大部分瀏覽器都支援這兩個屬性
兩個屬性作用類似,都可以獲取到標籤內部的內容,
不同是innerHTML會獲取到html標籤,而innerText會自動去除標籤
如果使用這兩個屬性來設定標籤內部的內容時,沒有任何區別的
讀取標籤內部的文字內容
<h1>h1中的文字內容</h1>
元素.firstChild.nodeValue
document物件的其他的屬性和方法
document.all
獲取頁面中的所有元素,相當於document.getElementsByTagName("*");
document.documentElement
獲取頁面中html根元素
document.body
獲取頁面中的body元素
document.getElementsByClassName()
根據元素的class屬性值查詢一組元素節點物件
這個方法不支援IE8及以下的瀏覽器
document.querySelector()
根據CSS選擇器去頁面中查詢一個元素
如果匹配到的元素有多個,則它會返回查詢到的第一個元素
document.querySelectorAll()
根據CSS選擇器去頁面中查詢一組元素
會將匹配到所有元素封裝到一個數組中返回,即使只匹配到一個
DOM修改
document.createElement()
可以根據標籤名建立一個元素節點物件
document.createTextNode()
可以根據文字內容建立一個文字節點物件
父節點.appendChild(子節點)
向父節點中新增指定的子節點
父節點.insertBefore(新節點,舊節點)
將一個新的節點插入到舊節點的前邊
父節點.replaceChild(新節點,舊節點)
使用一個新的節點去替換舊節點
父節點.removeChild(子節點)
刪除指定的子節點
推薦方式:子節點.parentNode.removeChild(子節點)