前一篇介紹了在網頁中利用DOM API改變HTML架構與內容的方法。
要在HTML中插入HTML標籤有兩種做法:
假設一個情境,有一天華山論劍大會的主辦人金小庸要擬一份參加者名單列表,他只有拿到一個陣列,要把陣列的資料輸出到網頁上,如果是利用DOM API提供的方法,請問他要怎麼做?
這是金小庸拿到的陣列:
var heros = [
{
name:'黃藥師',
nickname:'東邪'
},
{
name:'歐陽鋒',
nickname:'西毒'
},
{
name:'段皇爺',
nickname:'南帝'
},
{
name:'洪七公',
nickname:'北丐'
},
{
name:'王陽明',
nickname:'中神通'
}
];
金小庸要把名單輸出到<ul class='list'></ul>
中間:
<h1>華山論劍參加名單</h1>
<ul class="list">
</ul>
如果以我們前一篇談到的方法,會用for迴圈的方式去捉資料,然後創造一個 <li>
的元素節點,把資料塞入<li>
元素節點,再把他們利用迴圈一個一個appendChild()到 <ul class="list"> </ul>
中間。
var inviteList = document.querySelector('.list');
var len = heros.length;
console.log(len);
for (var i=0; i < len; i++){
var guest = document.createElement('li');
guest.textContent = heros[i].nickname + ' : ' + heros[i].name;
inviteList.appendChild(guest);
}
以上就是利用createElement()創造節點在網頁中插入HTML標籤的方式。
而另外一種方法是以迴圈用 innerHTML 組完字串之後,再將它渲染出來。這種方法的優點是效能快,缺點是有資安風險,必須確定拿到的資料沒有問題,才能用innerHTML在網頁中插入標籤。
一樣的情境,金小庸一樣拿到了一個陣列,跟一個準備要填的空白網頁,這次要用innerHTML來加入邀請名單:
這是金小庸拿到的陣列:
var heros = [
{
name:'黃藥師',
nickname:'東邪'
},
{
name:'歐陽鋒',
nickname:'西毒'
},
{
name:'段皇爺',
nickname:'南帝'
},
{
name:'洪七公',
nickname:'北丐'
},
{
name:'王陽明',
nickname:'中神通'
}
];
金小庸要把名單輸出到<ul class='list'></ul>
中間:
<h1>華山論劍參加名單</h1>
<ul class="list">
</ul>
使用innrHTML組字串的具體步驟如下:
var inviteList = document.querySelector('.list');
var guest = '';
var len = heros.length;
for(var i = 0; i < len ; i++){
guest += '<li>' + heros[i].nickname + ' : ' + heros[i].name;
}
inviteList.innerHTML = guest;
不論是innerHTML或是createElement()都是組字串的好方法,如果沒有資安疑慮,innerHTML效能高,是首選。如果有資安疑慮,那就以createElement()來處理。