2009-11-13 79 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