innerHTML 寫法
可以在指定的 id 或 class 裡面塞 html,但原本的東西就會被刪除。動態新增陣列或是 JSON 列表時非常好用。
使用 innerHTML 組字串 技巧
innerHTML 與 for 迴圈運用
通常搭配一組陣列資料(或 JASON 資料),使用 for 迴圈依序抓出需要的值,並搭配 innerHTML 賦予新的 Html 標籤與內容。若需要加總,則在 for 迴圈外層 先給定一個空值,用來裝加總後的值,因為 innerHTML 有一個特性,就是會將原本的內容全部刪除,所以在 for 迴圈內使用 +=(i=i+1) 便可以成功將所有選取的值做加總。
createElement 寫法
以 DOM 增加子節點的方式,動態新增一個 html 標籤的元素至指定的元素內,和 innerHTML 不同的是:原本的東西不會被刪除。
createElement 與 for 迴圈運用
innerHTML 與 createElement 搭配 for 迴圈 之差異
innerHTML 搭配 for 迴圈
1. 會將原本的內容刪除,故需在 for 外層 先給定一個變數 給空值 用來裝 加總後的值。
2. 使用「組字串」的方式,給標籤:’<li>’ + farms[i].farmer + ’</li>’
。
3. 再使用(i+=1)方式 加總,抓出陣列裡全部的值。
4. 最後,在迴圈外層,在要變更的元素上,使用 innerHTML = 用來裝加總後的變數。el.innerHTML = str;
createElement 搭配 for 迴圈
1. 不會將原本的內容刪除。
2. 使用createElement(’標籤’)
,在document
上先新增標籤。
3. 再使用textContent
在標籤內 新增文字內容。
4. 最後,在迴圈內,在要變更的元素上,使用 appendChild (組好的 DOM )。el.appendChild= str;
XSS :跨站指令攻擊(Cross-site scripting)
innerHTML 有資安上的問題,因為 innerHTML 是用「組字串」的方式給標籤和內容,所以駭客會利用塞字串的方式,把一些惡意的 JavaScript 程式碼一併塞進去。
入侵方式一
直接入侵你的資料庫,將你全部 js 的等於一律去做改寫,改寫成他自己的 JavaScript 檔案。
入侵方式二
在用戶可輸入欄位上(textarea
) ,如果你是用 innerHTML 的做法,去抓取輸入資料時,駭客便可在裡面偷塞 script。
innerHTML 使用於可信任資料
可信任資料:自己網頁裡面的資料、後端資料庫。
不可信任資料:表單文字輸入欄位,用戶經由填寫、操控,按下送出按鈕後,才做解析的資料 。
createElement 相較安全的原因
指令是一步一步來的,必須先創建一個元素標籤,再去動態的給值,駭客較難入侵。