访问childNodes []时出现问题

时间:2011-02-23 03:02:34

标签: javascript

Javascript / HTML noob在这里......请保持温和。

我正在学习DOM和Javascript的方法,并使用以下页面来探索通过Javascript访问节点:

http://franklyanything.com/test2.html

正如你在Javascript的片段中看到的那样,我放入了Head,我正在尝试访问<html>元素的第二个子元素,它应该是Body元素。

然而,每次运行页面时都没有任何反应,Firebug会将变量报告为undefined。如果我将索引从[1]更改为[0],我没有问题。这可以正确识别<html>标记。

我很难过。想法?

提前致谢!

2 个答案:

答案 0 :(得分:4)

document.childNodes[0]不是<html>元素。这是doctype声明。

<!DOCTYPE HTML PUBLIC "...> 

您可以使用<body>直接访问document.body节点,并使用document.body.nodeName获取其节点名称。

如果您想使用childNodes访问它,请尝试

document.childNodes[1].childNodes[2].nodeName

// document.childNodes[1] => html
// document.childNodes[1].childNodes[0] => head
// document.childNodes[1].childNodes[1] => whitespace (text node)
// document.childNodes[1].childNodes[2] => body

如果<head><body>之间没有空格,那么<body>元素当然位于<html>子节点中的位置2或索引1。

如果你删除了doctype声明,以及头部和身体之间的空间,那么你的

document.childNodes[0].childNodes[1]

将按预期工作。

答案 1 :(得分:1)

我认为,真正的问题是您在文档准备之前调用代码。

window.onload=function(){
  var theBodyNode = document.childNodes[0].childNodes[1];
  alert(theBodyNode.nodeName);
}