2017-05-07 58 views
0

Jsfiddle here爲什麼nodeNames不同?

<p id="para-01"><span>First span</span></p> 
<p id="para-02"> 
    <span>Second span</span> 
</p> 

兩個段落幾乎除了新線相同。爲什麼nodeNames是SPAN#text

+2

'#para-02'中的換行符創建一個名爲'#text'的隱藏DOM節點。 –

+0

/n是第一個孩子,它是#text – Alon

回答

5

文本也是一種節點!下面是一些HTML:

<p>hello <span>world</span></p> 

及其相應的樹:

Element p 
    Text "hello " 
    Element span 
     Text "world" 

空白 - 在這裏,換行和兩個空間 - 仍然讓一個文本節點,你的第二個<p>的第一個孩子是這個空白 - 僅限文本節點。

你可以在現代瀏覽器的第一個元素孩子與firstElementChild財產(updated fiddle)

console.log(document.getElementById('para-02').firstElementChild.nodeName) 

,並與children集合,其中只包含元素*所有的瀏覽器:

console.log(document.getElementById('para-02').children[0].nodeName) 

*在IE8及更早版本中加註釋