JavaScript DOM深度遍历(2种方法)和广度遍历
来源:互联网 发布:html数据库添加div 编辑:程序博客网 时间:2024/06/17 08:33
DOM深度优先遍历
1. API方法creatNodeIterator(ele,whatToShow,filter,boolean)
参数介绍:
whatToShow
:待显示的节点类型,值有NodeFilter.SHOW_ALL
NodeFilter.SHOW_ELEMENT
NodeFilter.SHOW_ELEMENT
NodeFilter.SHOW_ATTRIBUTE
filter
表示过滤待显示的节点boolean
表示实体扩展,在HTML
页面没用,为false
其内部包含nextNode(),previousNode()
代码举例
var body = document.getElementsByTagName('body')[0]; var filter = function (node) { return node.tagName.toLocaleLowerCase() === 'li' || node.tagName.toLocaleLowerCase() === 'p'? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; } var iterator = document.createNodeIterator(body,NodeFilter.SHOW_ELEMENT,null,false); var node = iterator.nextNode(); while(node !== null){ console.log(node.tagName); node = iterator.nextNode(); }
2. API方法creatNodeTreeWalker(ele,whatToShow,filter,boolean)
参数和creatNodeIterator
一样,但包含的功能更多,可以直接跳到对应的节点:
parentNode()
firstChild()
lastChild()
nextSibling()
previousSibling()
代码举例
var body = document.getElementsByTagName('body')[0]; var walker = document.createTreeWalker(body,NodeFilter.SHOW_ELEMENT,null,false); var node = walker.firstChild(); node = walker.nextSibling(); while(node !== null){ console.log(node.tagName); node = walker.nextNode(); }
3.递归方法实现
function deepFirstSearch (node) { console.log(node.tagName); if(node.children.length){ Array.from(node.children).forEach(function (el) { deepFirstSearch (el); }) } }
DOM广度优先遍历
原理:先将node节点push进queue中,每次处理一个出队的元素直到queue中无元素待处理,每次处理完一个节点后,将其子节点全部push进数组queue中
function wideFirstSearch(node) { var queue = []; while(node){ console.log(node.tagName); Array.from(node.children).forEach(function (el) { queue.push(el); }); node = queue.shift(); } }
阅读全文
0 0
- JavaScript DOM深度遍历(2种方法)和广度遍历
- DOM中BFS(广度优先遍历)和DFS(深度优先遍历)的方法
- 深度遍历和广度遍历
- 深度遍历和广度遍历
- 深度遍历和广度遍历
- dom结点的深度优先遍历和广度优先搜索
- js深度、广度 遍历 dom树
- 广度优先遍历和深度优先遍历
- XML的深度遍历和广度遍历
- 深度优先遍历和广度优先遍历
- 图的深度遍历和广度遍历
- 数据结构-深度遍历和广度遍历
- 图的广度遍历和深度遍历
- 深度优先遍历 和 广度优先遍历
- 图的深度遍历和广度遍历
- 图的深度遍历和广度遍历
- 深度遍历和广度遍历图解
- JS树-深度遍历和广度遍历
- 地址解析协议ARP
- mysql查询当天(今天)的数据
- windows下vim配色方案
- linux的操作命令
- 用python从0开始写2048小游戏
- JavaScript DOM深度遍历(2种方法)和广度遍历
- catkin_make的时候发生了什么
- 阿里巴巴Java开发手册v1.2.0网页版
- netstat 的10个基本用法
- 319. Bulb Switcher
- 在ROS使用自己安装的eigen时的cmake错误
- IP地址分类(A类 B类 C类 D类 E类)
- 300. Longest Increasing Subsequence
- JavaScript编码规范