#yyds干货盘点# 前端歌谣的刷题之路-第一百一十二题-虚拟dom

简介: #yyds干货盘点# 前端歌谣的刷题之路-第一百一十二题-虚拟dom

题目

请补全JavaScript代码,要求将对象参数转换为真实的DOM结构并返回。

注意:

1. tag为标签名称、props为属性、children为子元素、text为标签内容image.png

编辑

核心代码

<!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>虚拟dom</title>
</head>
<body>
  <!-- 
    析构对象参数中的tag、props、children、text值
    当tag的数据类型为”string“时,通过tag标签创建新节点并且挂载在vnode对象参数的el属性上
    再通过setAttribute函数给vnode.el节点设置属性
    然后通过appendChild、createTextNode将当前节点对象的text内容插入vnode.el节点上
    最后通过createElm函数递归children数组重复以上过程
    当tag的数据类型不为string时,直接通过createTextNode创建文本节点
 -->
  <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 => {
      let {
        tag,
        props,
        children,
        text
      } = vnode
      if (typeof tag == "string") {
        vnode.el = document.createElement(tag)
        _setAttr(vnode.el, props)
        vnode.el.appendChild(document.createTextNode(text))
        children.forEach(child {
          vnode.el.appendChild(_createElm(child))
        })
      } else {
        vnode.el = document.createTextNode(text)
      }
      return vnode.el
    }
    const _setAttr = (elem, attrs) => {
      for (key in attrs) {
        elem.setAttribute(key, attrs[key])
      }
    }
  </script>
</body>
</html>

总结

析构对象参数中的tag、props、children、text值

   当tag的数据类型为”string“时,通过tag标签创建新节点并且挂载在vnode对象参数的el属性上

   再通过setAttribute函数给vnode.el节点设置属性

   然后通过appendChild、createTextNode将当前节点对象的text内容插入vnode.el节点上

   最后通过createElm函数递归children数组重复以上过程

   当tag的数据类型不为string时,直接通过createTextNode创建文本节点


相关文章
|
5月前
|
前端开发 JavaScript 索引
前端性能优化:虚拟滚动技术原理与实战
前端性能优化:虚拟滚动技术原理与实战
765 80
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
439 5
|
JavaScript 前端开发 编译器
吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
【10月更文挑战第2天】吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
302 2
|
前端开发 JavaScript
前端基础(七)_DOM元素获取(getElementById、getElementsByTagName、getElementsByClassName、querySelector等)
本文介绍了如何在前端通过不同的方法获取DOM元素,包括getElementById、getElementsByTagName、getElementsByClassName、querySelector和querySelectorAll。
812 3
|
XML 缓存 JavaScript
提升对前端的认知,不得不了解Web API的DOM和BOM
该文章强调了在前端开发中理解和掌握DOM(文档对象模型)和BOM(浏览器对象模型)的重要性,并介绍了它们的相关操作和应用。
提升对前端的认知,不得不了解Web API的DOM和BOM
|
JavaScript 前端开发
前端基础(十)_Dom自定义属性(带案例)
本文介绍了DOM自定义属性的概念和使用方法,并通过案例展示了如何使用自定义属性来控制多个列表项点击变色的独立状态。
197 0
前端基础(十)_Dom自定义属性(带案例)
|
JavaScript 前端开发 UED
【前端基础篇】JavaScript之DOM介绍2
【前端基础篇】JavaScript之DOM介绍
156 0
|
JavaScript 前端开发 搜索推荐
【前端基础篇】JavaScript之DOM介绍1
【前端基础篇】JavaScript之DOM介绍
204 0
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
移动开发 前端开发 JavaScript
使用html-to-image代替html2canvas,结合jspdf实现下载pdf(下载截图下载前端dom元素)
本文介绍了在前端项目中,当使用`html2canvas`遇到问题时,如何使用`html-to-image`库作为替代方案,结合`jspdf`实现将DOM元素生成为PDF文件并提供下载。文章首先讨论了`html2canvas`可能遇到的问题,并提供了该库的使用示例代码。随后,详细介绍了`html-to-image`库的安装和使用方法,展示了如何将DOM元素转换为Canvas,再利用`jspdf`生成PDF文件。最后,文章通过示例代码说明了整个转换和下载的过程,并展示了效果截图。
1124 0

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 3
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式