为什么这个javascript节点遍历不起作用?

时间:2012-12-05 18:37:40

标签: javascript dom

我主要是C#,Java,PHP开发人员;关联的数据库。看似无关紧要,但这是我觉得自己再次声明的声明的有效前兆;瞪着这个......令人失望的简单的javascript,似乎没有为我提供任何东西。

我的目的是遍历当前文档中的节点,评估其属性,并在特定节点上执行操作。我的代码如下(再次......这么简单,我感觉像是一个笨蛋),但输出相当不一致。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
function TraverseDocument()
{
    var Root = document.documentElement;

    for( Element in Root.childNodes )
    {
        document.writeln(Element);
    }
}
</script>
</head>

<body onLoad="javascript: TraverseDocument();">
<div id="test" testAttr="testData">
</div>
</body>
</html>

现在;考虑到这只是我的第五遍(教程,示例等),我在这段代码上尝试了一些排列:

// document.writeln(Element.nodeType);
// document.writeln(Element.nodeName);
// document.writeln(Element.nodeValue);

所有这些都是短暂的;显示'undefined'。当前代码(如我的第一个代码块所示)输出以下内容:

0 1 2 length item

有人能指出我在哪里出错吗?菜鸟问题;但是我仍然无法指责我。提前谢谢。

1 个答案:

答案 0 :(得分:2)

很简单,你编写的for循环迭代对象的属性,而不是数组中的项,你可能想要的实际上是:

function TraverseDocument()
{
    var Root = document.documentElement;

    for(var i = 0; i < Root.childNodes.length; i++ )
    {
        document.writeln(Root.childNodes[i]);
    }
}