<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<!-- 寫模板 -->
<div id="root">
<div>
<p>{{name}}</p>
<p>{{age}}</p>
</div>
<div>
<p>{{name}}</p>
</div>
</div>
</body>
<script>
// 步驟拆解
// 1. 拿到模板
// 2. 拿到數據 ( data )
// 3. 將數據與模板結合, 得到 的是 HTML 元素 ( DOM 元素 )
// 4. 放到頁面中
// 1. 拿到模板
let rzz = /\{\{(.+?)\}\}/g;
let temple = document.querySelector("#root")
let baseTemple = temple.cloneNode(true);
//2.拿到數據
let data = {
name: "張三",
age: "15"
}
// 3. 將數據與模板結合, 得到 的是 HTML 元素 ( DOM 元素 )
//遞歸
function recursionDOM(temple, data) {
let $childNodes = temple.childNodes;
let $data = data;
for (let i = 0; i < $childNodes.length; i++) {
if ($childNodes[i].nodeType === 3) {
// 文本節點, 可以判斷裏面是否有 {{}} 插值
let txt = $childNodes[i].nodeValue;
txt = txt.replace(rzz, (_, g) => {
let key = g.trim();
return data[key];
});
$childNodes[i].nodeValue = txt;
} else if ($childNodes[i].nodeType === 1) {
recursionDOM($childNodes[i], $data);
}
}
}
recursionDOM(temple, data);
</script>
</html>