嗯。。没发现有写好的,那就自己写一个,刚好自己今天看了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 += '&nbsp;&nbsp;&nbsp;&nbsp;';
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循环的条件完全就忽视掉了当前节点的最后一个子元素啊囧

最新文章

  1. Nginx - 配置
  2. hdu 1491 Octorber 21st
  3. Webx小应用的实现整理与分析
  4. word,excel,ppt转Pdf,Pdf转Swf,通过flexpaper+swftools实现在线预览
  5. Java 缩写总结
  6. 广度优先(bfs)和深度优先搜索(dfs)的应用实例
  7. 为什么int型最大的数是2147483647
  8. Luogu P4551 最长异或路径
  9. hibernate validator【原】
  10. HTTP各种特性
  11. Eclipse 中 Debug 调试 java 代码一直报 Source not found
  12. LED恒流驱动IC汇总
  13. Json对象和字符串互相转换 数据拼接 JSON使用方式
  14. ubuntu安装图形界面
  15. 织梦替换百度编辑器后栏目内容、单页无法保存bug修复
  16. s5-12 RIP
  17. 交叉编译strace
  18. APP性能测试中的几个重要概念
  19. PAT——1056. 组合数的和
  20. GOF23设计模式之代理模式(proxy)

热门文章

  1. 【APUE】Chapter5 Standard I/O Library
  2. CSS里一个奇怪的属性
  3. ios下 active 演示激活
  4. 「日常训练」Alena And The Heater (CFR466D2D)
  5. CSS3 : box-shadow
  6. python 基础篇 12 装饰器进阶
  7. Windows Server 2008 R2(x64) IIS7+PHP5(FastCGI)环境搭建
  8. [Effective Java] 创建和销毁对象篇
  9. LeetCode 21 ——合并两个有序链表
  10. cocos2d-x环境搭建 摘自百度文库