先來說一下 .innerHTML 與 .createElement 的差異
.innerHTML
與.createElement
的差異
🎃 用.innerHTML
來操控 html
🍋 步驟一:先組好「整個字串」
例如:
1 | str = '<li>卡斯伯</li><li>查理</li>'; |
🍋 步驟二:再讓瀏覽器自己去編譯出「<li></li>
和裡面的文字內容」
1 | el.innerHTML = str; |
‼️ .innerHTML
的特性:
會先把「原本的資料全部清除」之後,再帶入「新的資料」
🎃 用.createElement
來操控 html
🍋 步驟一:先在 JavaScript 生成一個「<li></li>
元素」
🍋 步驟二:在這個「<li></li>
元素」上,我可以做各種事情(例如:加入文字內容、改變文字顏色)
🍋 步驟三:最終再來決定,我要把這個「<li></li>
元素」塞在哪個「節點」上,例如:我要把「<li></li>
元素」用.appendChild
塞在<ul></ul>
裡面
‼️ .appendChild
的特性:
用「.appendChild
動態新增子節點」到節點上,會在「原本的資料“後面”」去做新增
✅ 「原本的資料」全部都會保留著
範例
html:
1 | <h1 class="title"></h1> |
現在,我要做的是:在<h1></h1>
裡面,塞入一個「<em></em>
」
作法如下
步驟一:用.createElement
新增 DOM 元素(新增 html 標籤)
🎃 document
代表:我要在「這個網頁的document
」新增一個元素
🎃 用.createElement
新增一個「<em></em>
」元素
1 | var str = document.createElement('em'); |
步驟二:在元素上新增內容
🎃 用.textContent
賦予「值」給str
🎃 先在 css 寫好樣式:
1 | .orange{ |
🎃 再用.setAttribute
新增一個 className 叫做「orange
」給str
1 | var str = document.createElement('em'); |
步驟三:要掛在哪個節點上
‼️ 元素新增出來之後,還不會出現在網頁上,原因為:我並沒有指定「元素要掛在哪個節點上」
這個新增的<em></em>
,要掛在哪個節點上呢?
–> 要掛在<h1></h1>
這個節點上
🎃 用.querySelector
選擇.title
🎃 .appendChild
代表:我要在.title
裡面,動態增加一個「子節點」
🍋 要增加的「子節點」,就是我在上面產生出來的 DOM 元素str
JS:
1 | var str = document.createElement('em'); |
😄 可以看到,<em></em>
就掛在<h1></h1>
這個節點上了
.appendChild
「不會」把原本的資料清除
如果在<h1></h1>
裡面,原本就已經有內容了(<em>1234</em>
)
html:
1 | <h1 class="title"> |
JS:
1 | var str = document.createElement('em'); |