拿到一個DOM節點后,我們可以對它進行更新。
可以直接修改節點的文本,方法有兩種:
一種是修改innerHTML
屬性,這個方式非常強大,不但可以修改一個DOM節點的文本內容,還可以直接通過HTML片段修改DOM節點內部的子樹:
// 獲取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 設置文本為abc: p.innerHTML = 'ABC'; // <p id="p-id">ABC</p> // 設置HTML: p.innerHTML = 'ABC <span style="color:red">RED</span> XYZ'; // <p>...</p>的內部結構已修改
用innerHTML
時要注意,是否需要寫入HTML。如果寫入的字符串是通過網絡拿到的,要注意對字符編碼來避免XSS攻擊。
第二種是修改innerText
或textContent
屬性,這樣可以自動對字符串進行HTML編碼,保證無法設置任何HTML標簽:
// 獲取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 設置文本: p.innerText = '<script>alert("Hi")</script>'; // HTML被自動編碼,無法設置一個<script>節點: // <p id="p-id"><script>alert("Hi")</script></p>
兩者的區別在於讀取屬性時,innerText
不返回隱藏元素的文本,而textContent
返回所有文本。另外注意IE<9不支持textContent
。
修改CSS也是經常需要的操作。DOM節點的style
屬性對應所有的CSS,可以直接獲取或設置。因為CSS允許font-size
這樣的名稱,但它並非JavaScript有效的屬性名,所以需要在JavaScript中改寫為駝峰式命名fontSize
:
// 獲取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 設置CSS: p.style.color = '#ff0000'; p.style.fontSize = '20px'; p.style.paddingTop = '2em';