javascript - 有没有办法映射所有 HTML 元素和子元素?
问题描述
我有以下 html 格式,并希望它遍历所有孩子的孩子等。
<body>
<header>
<div>
<ul>
<li>
<span></span>
<a>
<span></span>
</a>
</li>
</ul>
</div>
</header>
<main>
<div></div>
<div></div>
</main>
<footer>
<ul>
<li>
<a></a>
</li>
</ul>
</footer>
</body>
输出应该在我可以以这种格式显示的数组中。
header
div
ul
li
span
a
span
main
div
div
footer
ul
li
a
有什么建议么?
谢谢!
解决方案
下面是循环遍历 DOM 树的递归方法。
function loopDOMTree(parent) {
var treeString = "";
function loopTree(parent2, tabs) {
treeString += tabs + parent2.tagName + "\n";
for (let tag of parent2.children) {
if (tag.childElementCount == 0) {
treeString += tabs + '\t' + tag.tagName + "\n";
} else {
loopTree(tag, tabs + '\t')
}
}
}
loopTree(parent, "");
return treeString;
}
console.log(loopDOMTree(document.body));
<body>
<header>
<div>
<ul>
<li>
<span></span>
<a>
<span></span>
</a>
</li>
</ul>
</div>
</header>
<main>
<div></div>
<div></div>
</main>
<footer>
<ul>
<li>
<a></a>
</li>
</ul>
</footer>
</body>
推荐阅读
- python - 运动不起作用 pygame,它告诉我 x 没有定义,即使它在第 64 行定义
- javascript - 在 div 中加载时加载进度条不起作用
- elixir - Elixir/Phoneix - SFTPClient 连接错误
- css - 用于缩放高分辨率的媒体
- xml - 模板和xml
- python - 同时运行多个 Google Colab Notebook
- mysql - “Azure Defender for MySQL”和“Azure Database for MySQL 的高级威胁防护”之间的区别
- python - Seaborn 联合图用相关性注释
- react-native - 如何在新的 React Native 架构中调试 javascript?
- javascript - 函数未在管道中的地图内执行