DOM遍历-NodeIterator VS TreeWalker

DOM遍历是以深度优先遍历的,定义了两种遍历DOM的结构类型NodeIteratorTreeWalker

  • 深度优先遍历
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dom遍历</title>
</head>
<body>
<div>
    <ul>
        <li>1</li>
    </ul>
</div>
</body>
</html>

顺序:document -> html -> head -> title -> Dom遍历 -> body -> div -> ul ->li -> 1

  • NdeIterator
    方法:document.createNodeIterator()
    四个参数:

root:搜索起点的节点
whatToShow:节点数字代码
filter:过滤器
entityReferenceException:布尔值,表示是否要扩展实体引用。这个参数在HTML页面中没有用,因为其中的实体引用不能扩展。
在Firefox和Chrome中,createNodeIterator函数除了的一个参数外的其它参数都是可选的。但是在IE中四个参数必须齐全,所以使用时一般四个参数全传上。

whatToShow参数可以有下列这些常量或其组合的取值:
1、NodeFilter.SHOW_ALL:搜索所有节点;
2、NodeFilter.SHOW_ELEMENT:搜索元素节点;
3、NodeFilter.SHOW_ATRRIBUTE:搜索特性节点;
4、NodeFilter.SHOW_TEXT:搜索文本节点;
5、NodeFilter.SHOW_ENTITY_REFERENCE:搜索实体引用节点;
6、NodeFilter.SHOW_ENTITY:搜索实体节点;
7、NodeFilter.SHOW_PROCESSING_INSTRUCTION:搜索PI节;
8、NodeFilter.SHOW_COMMENT:搜索注释节点;
9、NodeFilter.SHOW_DOCUMENT:搜索文档节点;
10、NodeFilter.SHOW_DOCUMENT_TYPE:搜索文档类型节点;
11、NodeFilter.SHOW_DOCUMENT_FRAGMENT:搜索文档碎片节节;
12、NodeFilter.SHOW_NOTATION:搜索记号节点;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dom遍历</title>
</head>
<body>
<div id="myDiv">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</div>
</body>
</html>
<script type="text/javascript">
    let div = document.getElementById("myDiv");
    let iterator = document.createNodeIterator(div,NodeFilter.SHOW_ELEMENT,
null,false);
    let node = iterator.nextNode();
    alert(node);
    while(node!==null){
        alert("node : "+ node.tagName);
        node = iterator.nextNode();
    }
</script>

    alert("只想显示li标签");
    let filter = function (node2) {
        return node2.tagName.toLowerCase() === "li" ?
            NodeFilter.FILTER_ACCEPT:
            NodeFilter.FILTER_SKIP;
    };
    let iterator2 = document.createNodeIterator(div,NodeFilter.SHOW_ELEMENT,
filter,false);
    let node2 = iterator2.nextNode();
    alert(node2);
    while(node2!==null){
        alert("node2 : "+ node2.tagName);
        node2 = iterator2.nextNode();
    }
  • TreeWalker
    建立和上面一样,但是它更加灵活:
    parentNode():进入当前节点的父节点;
    firstChild():进入当前节点的第一子节点;
    lastChild():进入当前节点的最后一个子节点
    nextSibling():进入当前节点的下一个兄弟节点
    previousSibling():进入当前节点的前一个兄弟节点
    可以任意方向查找
  • filter值
    TreeWalker除了上面出现的NodeFilter.FILTER_ACCEPT, NodeFilter.FILTER_SKIP;还有NodeFilter.FILTER_REJECT。
    NodeFilter.FILTER_SKIP:跳过相应的节点继续到下一节点
    NodeFilter.FILTER_REJECT:跳过相应节点以及整个子树
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  •   DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。   DOM2 和 DOM3 级则在这个结构...
    霜天晓阅读 1,435评论 1 3
  • DOM 变化 如何确认浏览器是否支持 DOM 2 和 DOM 3 新增的模块:var supportsDOM2Co...
    云之外阅读 467评论 0 0
  • 先上dom结构 以document为根节点的DOM树进行深度优先遍历的先后顺序 从document开始依序向前,访...
    fenerchen阅读 503评论 2 1
  • 草叶上的露水 是天空,留给季节的眼泪 白天和夜的交替 凝结,晶莹,沉醉 每一滴白露,都将为霜 每一片青草,都将枯萎...
    俞壹阅读 401评论 0 6
  • 也许你已经看厌了咪蒙的情感,厌倦了十点读书的鸡汤,那就来点新鲜的吧。今天男神君给你讲一下朋友Amy故事。 朋友Am...
    嘉有女神阅读 730评论 0 1