vue3+echarts应用——深度遍历html的dom结构并用树图进行可视化

文章目录

    • ⭐前言
      • 💖vue3系列文章
    • ⭐html数据解析
      • 💖 html字符串转为html对象
      • 💖 深度遍历html对象内容
    • ⭐echarts 树图的渲染
      • 💖 处理html内容为树状结构
      • 💖 渲染树状图
      • 💖 inscode代码块
    • ⭐总结
    • ⭐结束

yma16-logo

⭐前言

大家好,我是yma16,本文分享关于 vue3+echarts应用——深度遍历 html 的 dom结构并使用树图进行可视化。

💖vue3系列文章

vue3 + fastapi 实现选择目录所有文件自定义上传到服务器
前端vue2、vue3去掉url路由“ # ”号——nginx配置
csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板
认识vite_vue3 初始化项目到打包
python_selenuim获取csdn新星赛道选手所在城市用echarts地图显示
让大模型分析csdn文章质量 —— 提取csdn博客评论在文心一言分析评论区内容
前端vue3——html2canvas给网站截图生成宣传海报
vue3+echarts可视化——记录我的2023编程之旅

html数据结构的特征
HTML的结构是由标签组成的,标签分为两类:封闭标签和非封闭标签。
封闭标签(闭合标签)是指在标签内部添加内容,需要使用开始标签和结束标签将内容包裹起来。

⭐html数据解析

分析html的结构
HTML DOM (Document Object Model) 数据结构是一种树状结构,用于表示HTML文档的结构和内容。它允许开发者通过JavaScript来操作和修改HTML元素、属性和文本内容。

HTML DOM 的树状结构包含以下几个主要的节点类型:

  1. Document节点:代表整个HTML文档,是DOM树的根节点。
  2. Element节点:代表HTML元素,如

    • 等。它们可以包含子节点和属性。

  3. Text节点:代表HTML文本内容。它是Element节点的子节点,不可以包含其他子节点。
  4. Attribute节点:代表HTML元素的属性。

HTML DOM 数据结构的关系如下:

  • Document节点包含一个或多个Element节点,每个Element节点可以包含其他Element节点或Text节点。
  • Element节点可以包含一个或多个Text节点,每个Text节点都是Element节点的子节点。
  • Element节点可以包含一个或多个Attribute节点,每个Attribute节点都是Element节点的属性。

开发者可以使用JavaScript通过HTML DOM数据结构来访问和修改HTML文档。例如,可以使用getElementById()来获取特定id的元素,使用innerHTML来修改元素的内容,使用setAttribute()来设置元素的属性等。

💖 html字符串转为html对象

可以使用DOMParser对象将HTML字符串转换为DOM对象。

const parser = new DOMParser();
const htmlString = '<div><h1>Hello World</h1><p>This is a paragraph</p></div>';
const doc = parser.parseFromString(htmlString, 'text/html');
console.log(doc);

上述代码将HTML字符串解析为DOM对象,然后将DOM对象打印到控制台。你可以使用doc对象进行进一步的DOM操作。

💖 深度遍历html对象内容

javascript深度遍历html的节点

function traverse(node) {// 遍历当前节点的子节点for (let i = 0; i < node.childNodes.length; i++) {const child = node.childNodes[i];// 如果是元素节点,打印节点名称,并递归遍历子节点if (child.nodeType === 1) {console.log(child.nodeName);traverse(child);}}
}// 获取根节点(document.documentElement为整个页面的根节点)
const root = document.documentElement;
// 调用深度遍历函数
traverse(root);

⭐echarts 树图的渲染

echarts渲染树状图的基础数据结构

const data = {name: 'tree',children: [{name: 'parent',children: [{name: 'children1',children: [{ name: 'children11', value: 721 },{ name: 'children112', value: 4294 }]},]}]
};

tree-data

💖 处理html内容为树状结构

javascript处理html内容为树状结构

import axios from 'axios'const getHtmlDoc = (htmlString) => {const parser = new DOMParser();const doc = parser.parseFromString(htmlString, 'text/html');return doc
}function traverse(node) {const children = []const name = node.nodeName// 遍历当前节点的子节点for (let i = 0; i < node.childNodes.length; i++) {const child = node.childNodes[i];// 如果是元素节点,打印节点名称,并递归遍历子节点if (child.nodeType === 1) {const childItem = traverse(child)children.push(childItem);}}return {name,children}
}const genTreeData = async (htmlHref) => {// 请求 html 内容const {data:htmlContent}=await axios.get(htmlHref)console.log('htmlContent',htmlContent)const htmlDoc = getHtmlDoc(htmlContent)const treeData=traverse(htmlDoc.body)console.log('treeData',treeData)return treeData
}export const treeData =genTreeData

💖 渲染树状图

vue3 渲染ecahrts树状图

<template><div><a-input-search v-model:value="state.htmlHref" placeholder="输入html链接" style="width: 100%;margin:10px;" @search="onSearch" /><div id="treeChartId" style="width:100%;height:600px;margin: 0 auto"></div></div>
</template>
<script setup>
import * as echarts from 'echarts';
import { reactive, onUnmounted, onMounted } from 'vue';
import { treeData } from './data.js'const state = reactive({exportLoading: false,echartInstance: undefined,treeData: [],htmlHref:'htmlContent.html'
})function renderEchartLine() {// 基于准备好的dom,初始化echarts实例const domInstance = document.getElementById('treeChartId')if (domInstance) {domInstance.removeAttribute('_echarts_instance_')}else {return}const myChart = echarts.init(domInstance);const data = state.treeDataconst option = {title: {text: 'html可视化',textStyle: {color: '#ffffff'}},tooltip: {trigger: 'item',triggerOn: 'mousemove'},series: [{type: 'tree',id: 0,name: 'html tree',data: [data],top: '10%',left: '8%',bottom: '22%',right: '20%',symbolSize: 7,edgeShape: 'polyline',edgeForkPosition: '63%',initialTreeDepth: 3,lineStyle: {width: 2},label: {backgroundColor: '#fff',position: 'left',verticalAlign: 'middle',align: 'right'},leaves: {label: {position: 'right',verticalAlign: 'middle',align: 'left'}},emphasis: {focus: 'descendant'},expandAndCollapse: true,animationDuration: 550,animationDurationUpdate: 750}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option, true);// 监听state.echartInstance = myChart;window.onresize = myChart.resize;
}const onSearch=async (htmlHref)=>{state.treeData = await treeData(htmlHref)renderEchartLine()
}onUnmounted(() => {window.onresize = null
})
const getHubConfig = async () => {state.treeData = await treeData(state.htmlHref)renderEchartLine()
}onMounted(() => {getHubConfig()
})
</script>

效果:
tree-html

💖 inscode代码块

⭐总结

深度遍历
树的深度遍历算法有两种方式:先序遍历和后序遍历。

先序遍历(Preorder Traversal)是指先访问根节点,然后递归地先序遍历左子树,再递归地先序遍历右子树。

后序遍历(Postorder Traversal)是指先递归地后序遍历左子树和右子树,然后访问根节点。

html结构解析
HTML使用标签来定义文档的结构和内容。标签以尖括号(< >)包围,并且通常成对出现,其中一个是开始标签,另一个是结束标签

html的标签成对出现可以用栈的数据结构来存储

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!

windows11-background

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 最后,感谢你的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/333463.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试高频算法解析】算法练习5 深度优先搜索

前言 本专栏旨在通过分类学习算法&#xff0c;使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目&#xff0c;帮助您深度理解每种算法&#xff0c;避免出现刷了很多算法题&#xff0c;还是一知半解的状态 专栏导航 二分查找回溯&#xff08;Backtracking&…

湖南大学-数据库系统-2017期末考试解析

【写在前面】 这是2017年的卷子&#xff0c;复习备考的时候做了并与同学校对了答案。答案仅供参考。这张难度不大&#xff0c;比起前一年的并没有增加什么知识点。这一年好像没有简答题。 一、 单选题&#xff08;每小题 2 分&#xff0c;共 20 分&#xff09; 1 、数据库的概…

实战:低代码表单引擎助力文件上传与数据处理

在当今的信息化时代&#xff0c;数据已成为企业的重要资产。为了更好地管理和利用这些数据&#xff0c;许多企业开始采用表单上传组件来导入和处理数据。通过使用表单上传组件&#xff0c;用户可以方便地将文件上传至系统中&#xff0c;然后进行后续的数据处理和分析。这种方式…

局域网IP地址冲突、环路的罪魁祸首是什么?

中午好&#xff0c;我的网工朋友。 这个时代&#xff0c;网络已经贯穿了人们的生活&#xff0c;对企业而言&#xff0c;办公信息化更是离不开网络支持。 为了提高安全管理和信息化水平&#xff0c;很多企业都建立了完善的办公信息系统&#xff0c;但一些企业在网络建设方面还…

varnish的简单使用

varnish的简单使用 安装配置配置启动参数文件配置环境信息文件配置varnish反向代理 配置varnish启动varnish更加直观的查看varnish缓存手动清除缓存清除指定的缓存 varnish配置多后端配置多后端在本地配置域名解析查看测试结果 负载均衡配置导入模块定义负载均衡调度器调用负载…

ADS仿真 之 容差/良率分析

之所以要进行容差分析&#xff0c; 是因为任何电子元器件均存在一定的误差&#xff0c; 如电感、电容的精度等。 例如一个标称为2.0nH0.1nH的电感&#xff0c;代表的意思产品有99.74%的概率落在2.0nH0.1nH范围内&#xff0c; 即满足6σ &#xff0c;σ是标准偏差或者说方差&…

Java虚拟机ART 读书笔记 第2章 深入理解Class文件格式

GitHub - Omooo/Android-Notes: ✨✨✨这有一包小鱼干&#xff0c;确定不要吃嘛&#xff1f;( 逃 深入理解Android&#xff1a;Java虚拟机ART 读书笔记 以下内容均来自书中内容 建议看原书哦 第2章 深入理解Class文件格式 2.1 class文件总览 Class文件格式全貌 u4&#xff…

苹果电脑交互式原型设计软件Axure RP 9 mac特色介绍

Axure RP 9 for Mac是一款交互式原型设计软件&#xff0c;使用axure rp9以最佳的方式展示您的作品&#xff0c;优化现代浏览器并为现代工作流程设计。同时确保您的解决方案正确完整地构建。Axure RP 9 for Mac为您整理笔记&#xff0c;将其分配给UI元素&#xff0c;并合并屏幕注…

2.SPSS数据文件的建立和管理

文章目录 数据文件的特点建立SPSS数据文件步骤 数据文件的结构变量的规则 数据的录入和保存录入数据保存文件 数据的编辑数据定位 数据文件的特点 SPSS数据库文件包括文件结构和数据两部分 SPSS数据文件中的一列数据称为一个变量。每个变量都应有一个名称&#xff0c;即&…

第二证券:股票私募仓位指数创近八周新高

1月8日&#xff0c;A股几大首要指数全线收跌&#xff0c;上证指数收于日内最低点2887.54点&#xff0c;间隔上一年5月份的阶段高点3418.95点现已跌去了15.54%。 不过&#xff0c;虽然商场仍未清晰止跌&#xff0c;私募基金们却现已进场“抄底”。私募排排网最新发布的私募仓位…

Android Matrix (二)具体图形变换参数的获取

Android Matrix &#xff08;二&#xff09;具体图形变换参数的获取 Matrix 类在 Android 中用于表示 3x3 的变换矩阵。这个矩阵可以应用于画布&#xff08;Canvas&#xff09;&#xff0c;视图&#xff08;View&#xff09;或者位图&#xff08;Bitmap&#xff09;&#xff0…

软件测试|Linux基础教程:cp命令详解,复制文件或目录

简介 在Linux系统中&#xff0c;cp命令是一个非常常用且强大的命令&#xff0c;用于复制文件和目录。cp命令允许我们在不同目录之间复制文件或目录&#xff0c;并可以根据需求对文件复制的行为进行调整。在本文中&#xff0c;我们将详细解释cp命令的用法以及一些常见的选项。 …