遍历文档内容,得到HTML层级结构
嗯。。没发现有写好的,那就自己写一个,刚好自己今天看了DOM操作的知识点,巩固一下。
HTML可以表示为一个层次结构,生成的DOM Tree 就是类似与数据结构中的树一样,每个DOM节点都有它的childNodes(动态的类数组对象), parentNode(指向父节点),nextSibling(下一个兄弟节点),previousSibling(上一个兄弟节点),还有辅助类的firstChild和lastChild。
因为不同浏览器中对节点的遍历处理的不一样,比如:
<ul id = "mylist">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
如果是IE解析,ul 元素会有3个子节点,而其他浏览器,ul 元素有七个子节点,包括3个 li 元素和 4个文本节点(<li>元素之间的空格),所以如果只想访问当前节点的元素子节点,在用childNodes遍历的时候需要先判断一下子节点的nodeType,如果等于1(element node),再执行想要的操作。
H5对DOM操作也做了响应的扩展, 提供firstElementChild, lastElementChild, previousElementChild, nextElementChild 这样的更方便的元素遍历方式。
所以这道题就可以用树的深度优先遍历DOM Tree,来打印出HTML的层级结构。
代码如下:
//用document.write输出的时候:
var space = '';
function renderD(node, space) {
if(node === null) return;
var child = node.firstElementChild;
space += ' ';
while(child != null && child.nodeName.toLowerCase() != 'br') {
document.write(space + child.nodeName + '<br>');
renderD(child, space);
child = child.nextElementSibling;
} } renderD(document, space);
//console输出
var space = '';
(function renderD(node, space) {
if(node === null) return;
var child = node.firstElementChild;
space += ' ';
while(child != null) {
console.log(space + child.nodeName + '\n');
renderD(child, space);
child = child.nextElementSibling;
} })(document, space);
注:文档的根节点是document
在JS红宝书中289页,我觉得它的元素遍历不对。。 那个while循环的条件完全就忽视掉了当前节点的最后一个子元素啊囧
遍历文档内容,得到HTML层级结构的更多相关文章
- DOM操作-遍历HTML文档内容
基础: JS nodeType返回类型:http://blog.csdn.net/qyf_5445/article/details/9232907 代码: <!DOCTYPE html> ...
- bs4--官文--遍历文档树
遍历文档树 还拿”爱丽丝梦游仙境”的文档来做例子: html_doc = """ <html><head><title>The Dor ...
- jsonp 遍历文档
遍历文档 将html解析成一个Document后,就可以使用类似Dom的方法进行操作 File input = new File("/tmp/input.html"); Docum ...
- 运用 Range 对象处理 Word 文档内容
运用 Range 对象处理 Word 文档内容 在所有 Office 应用程序中,Microsoft Word 可能是应用最广泛的应用程序,它还经常在自定义 Office 解决方案中扮演重要的角色 ...
- 【Javascript DOM读书笔记】chapter8 充实文档内容
本章目的 作者举出了第一个实例,为一篇 web 页面动态创建缩略语(abbreviation)的列表.大家知道,我们可以使用 <abbr>...</abbr> 来指示一个缩略语 ...
- 前端(十八)—— jQuery高级操作:选择器、文本属性与类、事件、文档操作、动画、结构关系
JQ选择器.文本属性与类.事件.文档操作.动画.结构关系 可参考jQuery的API文档 一.选择器 1.css语法匹配 标签 | 类 | id | 交集 群组 | 后代 | 兄弟 伪类 | 属性 $ ...
- 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)
为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...
- 使用requests爬取梨视频、bilibili视频、汽车之家,bs4遍历文档树、搜索文档树,css选择器
今日内容概要 使用requests爬取梨视频 requests+bs4爬取汽车之家 bs4遍历文档树 bs4搜索文档树 css选择器 内容详细 1.使用requests爬取梨视频 # 模拟发送http ...
- 织梦DedeCMS首页调用单页文档内容的方法
很多使用织梦dedecms单页文档功能的朋友都想知道如何在织梦首页调用单页文档的内容,下面就教大家具体的实现方法: 具体步骤如下: 首先在首页模板需要显示单页文档内容的地方插入如下代码: {dede: ...
随机推荐
- 链接程序的时候遇到问题:fatal error LNK1104: cannot open file 'rctrl-d.lib'
1.lib库文件没有添加到工程中(工程里面根本就没有这个文件) 2.
- C++学习007-使用exit退出进程
使用exit可以实现退出当前进程. 如下 在程序接收到一个字符后,就退出进程 编写环境 vs2015 int main() { int a = 10, b = 20; std::cout <&l ...
- react实现换肤功能
一.目标 提供几种主题色给用户选择,然后根据用户的选择改变应用的主题色: 二.实现原理 1.准备不同主题色的样式文件: 2.将用户的选择记录在本地缓存中: 3.每次进入应用时,读取缓存 ...
- 【读书笔记】2_增强学习中的Q-Learning
本文为Thomas Simonini增强学习系列文章笔记或读后感,原文可以直接跳转到medium系列文章. 主要概念为: Q-Learning,探讨其概念以及用Numpy实现 我们可以将二维游戏想象成 ...
- select2赋值需要注意
$('#mySelect2').val(data.id).trigger('change'); 需要在赋值后,调用下change事件,不然的话展示值的span不会显示select最新的选中值.
- 基于twemproxy和vip实现redis集群的无感知弹性扩容
目标是实现redis集群的无感知弹性扩容 关键点 1.是无感知,即对redis集群的用户来说服务ip和port保持不变 2.弹性扩容,指的是在需要时刻可以按照业务扩大redis存储容量. 1.业务场景 ...
- FileReader 获取图片BASE64 代码 并预览
FileReader 获取图片的base64 代码 并预览 FileReader ,老实说我也不怎么熟悉.在这里只是记录使用方法. 方法名 参数 描述 abort none 中断读取 readAsBi ...
- 微信小程序开发中怎么设置转发(分享)的信息
如果什么都不设置,转发时默认名称是小程序的名称,转发的图片显示的是当前页面的截图,如图一 如何在自定义转发信息呢? 在进行转发的页面中: Page({ onShareAppMessage: funct ...
- larbin之哈希之谈
由于工作原因,打算对larbin的源码进行分析一番 用的是2.6.3版本的larbin源码,由于这是业余,会断断续续的分析上传,已做记录笔记 今天我们分析一下larbin的哈希表 这个哈希表结构比较简 ...
- IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流
Java基础笔记 – IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流本文由 arthinking 发表于627 天前 ⁄ Java基础 ⁄ 评论数 1 ⁄ 被围观 2,036 views+ ...