虚拟Dom

虚拟Dom

一直以来都知道虚拟dom这个概念就是用代码来生成Dom,可以用diff算法

今天自己来实现一下,如下

创建一个对象,包含元素的各种属性,我这里就写了标签名和文字。嵌套的加个个Child

然后循环数组创建元素插入到body中,如果有child就插入到父元素中。

因为是一个数组,每次改变的时候就可以对比上次和本次dom数组

判断哪里变化了,变化了才修改这就是diff算法

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      const vDom = [
        {
          node: "p",
          text: "我是p标签",
        },
        {
          node: "div",
          text: "我是div",
        },
        {
          node: "ul",
          text: "我是ul",
          child: [{ node: "td", text: "我是td" }],
        },
      ];
      let tree = document.body;
      const showDom = (vDom, dom) => {
        vDom.map((item) => {
          const node = document.createElement(item.node);
          node.innerHTML = item.text;
          if (item.child) {
            showDom(item.child, node);
          }
          dom.appendChild(node);
        });
      };
      showDom(vDom, tree);
    </script>
  </body>
</html>

页面中和dom元素显示如下:

qIkXAf.png

qIkLHP.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值