這篇要介紹「createElement 與 for 迴圈的搭配運用」
html:
1 | <h1>每個農場的“農夫名字”</h1> |
JS:
🎃 farms
陣列中,有兩個物件(兩個農場)
1 | var farms = [ |
現在,我要做的是:依序列出「farms
陣列」中,每個農場的「農夫名字」
作法如下:
🎃 建立變數el
,用來選取.list
:
var el = document.querySelector('.list');
🎃 建立變數farmsLen
,來計算出「farms
陣列中,共有幾筆資料」:
var farmsLen = farms.length;
JS:
1 | var el = document.querySelector('.list'); |
這裡不需要使用「空的字串 var str = '';
」
原因為:這裡會使用.appendChild
來增加子節點
🎃 .appendChild
的特性:
.appendChild
會「在原本的資料“後面”」依序去增加「新的資料」,“不會”把原本的資料清除
for
迴圈
1️⃣ 步驟一:用.createElement
新增一個 DOM 元素
🎃 新增一個變數str
,用來組字串–> 新增一個「<li></li>
元素」:
var str = document.createElement('li');
2️⃣ 步驟二:在元素增加文字內容
🎃 用.textContent
在變數str
新增「文字內容」–> 農場的農夫名字: str.textContent = farms[i].farmer;
🍋 這時,<li></li>
還不會出現在網頁上,因為「還沒有指定<li></li>
要掛在哪個節點上」
3️⃣ 步驟三:要掛在哪個節點上
我要把<li></li>
掛在.list
上
🎃 用.appendChild
,在.list
掛上一個「子節點str
」: el.appendChild(str);
‼️ 這裡的el.appendChild(str);
一定要寫在「for
迴圈裡面」,是因為:
用console.log(str);
去看str
的值,會是這樣
🍋 跑第 1 次 for 迴圈:str
跑出「第一個農夫名字」
🍋 跑第 2 次 for 迴圈:str
跑出「第二個農夫名字」
✅ 所以,el.appendChild(str);
也要跑「兩次for
迴圈」,才會“依序”掛上「子節點str
」:
🍋 跑第 1 次 for 迴圈:str
跑出「第一個農夫名字」–> 在.list
掛上<li>卡斯伯</li>
1 | <ul class="list"> |
🍋 跑第 2 次 for 迴圈:str
跑出「第二個農夫名字」–> 在.list
掛上<li>查理</li>
(掛在第一筆資料<li>卡斯伯</li>
的“後方”)
1 | <ul class="list"> |
😄 列出「farms
陣列」中,每個農場的「農夫名字」了
完整 JS:
1 | var farms = [ |