题解 | #虚拟DOM#

虚拟DOM

https://www.nowcoder.com/practice/a283d2c284ed49468c3b0f6ec0312b0f

思路:首先使用{tag,props,text,children}析构vnode,再判断tag是否为undefined,如果没有标签则直接使用createTextNode方法创建文本节点并返回,反之使用createElement方法创建tag标签元素,并遍历props对象,使用setAttribute方法为元素设置属性,再遍历子元素数组,依次递归创建子元素,并使用appendChild方法挂载在父元素上,最后返回当前元素即可。

<script>
   var vnode = {
      tag: 'ul',
      props: {
        class: 'list'
      },
      text: '',
      children: [
         {
            tag: "li",
            props: {
              class: "item"
            },
            text: '',
            children: [
                 {
                     tag: undefined,
                     props: {},
                     text: '牛客网',
                     children: []
                  }
             ]
          },
          {
              tag: "li",
              props: {},
              text: '',
              children: [
                   {
                       tag: undefined,
                       props: {},
                       text: 'nowcoder',
                       children: []
                   }
               ]
            }
         ]
     }
     const _createElm = vnode => {
        //析构vnode
        const {tag,props,text,children} = vnode
        //如果为空节点则直接创建文本节点并返回
        if(tag==undefined)
          return document.createTextNode(text)
        //否则创建tag元素
        const el=document.createElement(tag)
        //为节点添加属性
        for(let key in props)
          el.setAttribute(key,props[key])
        children.forEach(item=>{
          //将子元素挂载到父元素上
        el.appendChild(_createElm(item))
     })
     return el
   }
</script>

总结:createTextNode(文本)用于创建文本节点;createElement(标签)方法创建tag标签元素;setAttribute(键,值)方法为元素设置属性;父元素.appendChild(子元素)为父元素添加子元素。

#虚拟DOM#
前端js面试 文章被收录于专栏

前端js面试,帮助你更好的理解js。

全部评论

相关推荐

最近拿到了正浩的提前批offer感觉自己的实力得到了肯定,也给了我更多底气
搞机墨镜猫:正浩提前批官网好像就只有电力电子软硬件,哥们投的是这两个岗位吗
26届校招投递进展
点赞 评论 收藏
分享
07-15 16:52
已编辑
门头沟学院 Java
周五投的,流程今天结束
投递地平线等公司7个岗位
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务