2009-11-13 55 views
1

为什么函数NodeValue__Two()显示为null?对我来说,它应该显示与功能NodeValue__One()相同的功能。JavaScript - DOM nodeValue问题

我已经在IE6上测试过了。

<html> 
<body> 
<script language="JavaScript"> 
function NodeValue__One() 
{ 
    alert(myNodeOne.childNodes(0).nodeValue);//This is OK 
} 

function NodeValue__Two() 
{ 
    alert(document.all[6].nodeValue);//This is NOT OK 
} 
</script> 

<p>This PARAGRAPH has two nodes, 
    <b id="myNodeOne">Node One Text</b>, and 
    <b id="myNodeTwo">Node Two Text</b>. 
    <input id="txt1" type="text" value="Damn!!!" /> 
</p> 

<button onclick="NodeValue__One();">Node Value 1</button></br> 
<button onclick="NodeValue__Two();">Node Value 2</button> 

</body> 
</html> 
+0

它使用'的document.getElementById(”良好做法myNodeOne“)'而不仅仅是'myNodeOne' ... – 2009-11-13 09:20:59

+2

'childNodes(0)'是VBScript语法,它只能在IE中使用,并且只是由于Microsoft在20世纪90年代将它作为故意的不兼容性而引入的。改为使用JavaScript语法'childNodes [0]'。 – NickFitz 2009-11-13 10:51:58

回答

3

All数组是元素数组。元素在nodeValue中没有值。

另一方面,childNodes将包含元素和TextNodes。

由于All中列出的实际元素的数量可能与您在HTML中看到的数量不同,因此很难获得All的索引正确。例如,尽管HTML文本中没有HEAD或TITLE Element,但它们将出现在DOM中。

1

其中一个原因可能是您错误地认为“此段落有两个节点”。它至少有六个,其中包含三个包含“此段落有两个节点”,“和”以及“。”的文本节点。

+0

不可以,全部根本不包含文本节点。 – AnthonyWJones 2009-11-13 09:27:23

+0

好的一点,我对这个完全不相干的事实措辞是盲目的。 – 2009-11-13 09:42:43

2

这两种方法都被弃用且不安全。它会更好,如果你给你的元素的唯一标识符和用于getElementById功能来查找DOM元素:

var element = document.getElementById('id_of_element'); 
0

使用document.all[6].text这会给你Node Two Text