iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
自我挑戰組

Vscode 實作:用 HTML/CSS/JS 打造醫藥健康小工具箱系列 第 11

【Day 11】【Tool 1 實作】動態渲染結果:innerHTML 與 textContent 的安全與差異

  • 分享至 

  • xImage
  •  

本篇文章目錄

  1. 前言:算出了數字,然後呢?DOM 渲染的兩大途徑
  2. textContent vs innerHTML 核心差異比較
  3. 實戰應用:計算 BMI 評語並渲染至馬卡龍卡片
  4. 為什麼在醫療工具箱中我堅持使用 textContent?
  5. 結語

一、 前言:算出了數字,然後呢?DOM 渲染的兩大途徑

在 Day 09 與 Day 10 中,我們成功算出了 BMI、BMR 與 TDEE 的精準數值。然而,單純呈現「24.5」這個數字對使用者來說是不夠的——我們還需要告訴他這個數字代表「正常」還是「過重」。

在 JavaScript 中,要把這些文字與標籤寫回網頁畫面上,最常用的是 textContentinnerHTML。今天我們就來剖析這兩者的差異,並為 Tool 1 加上第一個版本的 BMI 狀態提示!

二、 textContent vs innerHTML 核心差異比較

屬性 textContent innerHTML
解析方式 僅將內容視為純文字(Text) 會將字串解析為 HTML 標籤結構
安全性 極高(自動過濾任何潛在指令碼) 較低(若插入使用者輸入的文字,易受 XSS 攻擊
效能 較快(無須解析 HTML 樹) 稍慢(需呼叫 HTML 解析器)
最佳使用情境 填入純數字、單純文字標題 動態產生包含 <span><strong> 等複合標籤結構

三、 實戰應用:計算 BMI 評語並渲染至馬卡龍卡片

根據衛福部標準,我們在 JS 中加入判斷邏輯,並透過 textContent渲染文字:

/tool1-calculator.j

https://ithelp.ithome.com.tw/upload/images/20260924/20184266Y2W5z1W0Sn.png

四、為什麼在醫療工具箱中我堅持使用 textContent?

在開發《醫藥健康數位工具箱》時,軟體品質與安全性是重要考量:

防範潛在安全漏洞 (XSS Attack):

textContent 在將文字寫入 DOM 時,會自動將 < 或 > 等特殊符號轉義(Escape)。即使未來輸入框被惡意輸入了 alert('hack'),textContent 也只會把它當作純文字印出來,而不會在使用者瀏覽器上執行惡意程式碼。

極佳的執行效能:

因為我們只需要更新數值標籤內部的「文字內容」,textContent 不需要觸發 HTML 解析器重新建構 DOM 樹,對於手機端或低配備裝置而言,UI 渲染更滑順、無延遲感。

五、結語

今天我們理解了 textContentinnerHTML 的使用時機。純文字我們堅持使用最安全的 textContent;而在需要強調重點文字(如加粗 <strong>)時,則善用 innerHTML

雖然現在能顯示「健康體位」或「體重過重」了,但卡片顏色看起來還是一模一樣。在明天的 [Day 12] 中,我們將利用 classList 讓卡片根據 BMI 狀態動態變色(綠/黃/紅)


上一篇
【Day 10】【Tool 1 實作】TDEE 活動量換算邏輯:switch...case 觀念演練
系列文
Vscode 實作:用 HTML/CSS/JS 打造醫藥健康小工具箱11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言