Javascript 遍历DOM Tree

TreeWalker

-创建

document.createTreeWalker(root,what_to_show, filter, if_expand_entity_references)

参考网址:https://developer.mozilla.org/zh-CN/docs/Web/API/TreeWalker
Code Example:

 var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);
    while (treeWalker.nextNode()) {
        handle(treeWalker.currentNode);
    }
function handle(node){
    If (node.nodeType==3)// text node
     {
        //do sth.
    }
    else If (node.nodeType==1)// element node
    {
    //do sth.
    }

}     

Recursive Way

Code example:
遍历并处理所有文本节点

function tranverse_tree(node){

  if (current = node.firstChild) {
    do {
       next = current.nextSibling;
       traverse_child_nodes(current,node);

} while (current = next) ;
    }
}

function traverse_child_node(node, root){
    if (node.nodeType==3)// text node
    {
        //do sth.
    }
    else If (node.nodeType==1)// element node
    {
        // skip some elements 
        var arr = ["STYLE", "COMMANDSET", "IMG", "NOSCRIPT", "SCRIPT"];
        if (arr.Exists(node.nodeName)) // Exists function is self-defined here.
            return ;

        // keep recursive traverse the sub tree.
        var current, next;
        if (current = node.firstChild) {
            do {
                next = current.nextSibling;
                traverse_child_node(current,root);           
            } while (current = next);

        }
    }   
}

Handle Embedded Iframes

当DOM tree中嵌入了Iframe节点时,需要在遍历过程中对其进行特别处理
Iframe是nodetype =1的其中一种情况,同时我理解的就是Iframe加载的也是一颗DOM tree.
So add code to above example:

if (node.nodeType === 1) {
    //HANDLE iframe node
    if (["IFRAME"].Exists(node.nodeName)) {
        tranverse_tree(node.contentDocument.body);
        return;
    }
    …….
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值