走DOM(javascript)

时间:2016-04-10 20:25:52

标签: javascript html dom recursion

我尝试使用javascript遍历页面的DOM,并对每个标记执行简单警报,以显示tagName属性。它似乎没有起作用。

这是jsfiddle(和beow)中的代码和HTML https://jsfiddle.net/fluffymuffins/fw208ozk/

我没有看到任何提醒。怎么了?

HTML

<body>
test text
<p>
some paragraph
</p>
<img src="http://example.com/image.jpg">
</body>

JS

var results = [];

walkDOM(document.body, function(node) {
    alert(node.tagName);
});

var walkDOM = function (node,func) {
        func(node);                     //What does this do?
        node = node.firstChild;
        while(node) {
            walkDOM(node,func);
            node = node.nextSibling;
        }

    };

1 个答案:

答案 0 :(得分:2)

所以,你正在调用一个尚不存在的方法:

在方法声明后轻松调用:

var results = [];

//declaration before
var walkDOM = function (node,func) {
        func(node);                     //What does this do?
        node = node.firstChild;
        while(node) {
            walkDOM(node,func);
            node = node.nextSibling;
        }
};    

//invoke method after
walkDOM(document.body, function(node) {
    alert(node.tagName);
});

您更新的小提琴:https://jsfiddle.net/diegopolido/fw208ozk/3/

func(node);行表示你正在调用args中的函数,也许这个例子会澄清你的想法:

var walkDOM = function (node,func) {
        func(node);  //this will invoke the functionToInvoke from arg
        node = node.firstChild;
        while(node) {
            walkDOM(node,func);
            node = node.nextSibling;
        }
};    

var functionToInvoke = function(node) {
    alert(node.tagName);
};

walkDOM(document.body, functionToInvoke);

您更新的小提琴:https://jsfiddle.net/diegopolido/fw208ozk/5/