在DOM里 屬性節點是不是元素節點的子節點?

書上有這麼一句話

&

Choose an image.&

書上說&

只有一個節點,是文本節點。為什麼id屬性節點不是p元素的子節點?

看到後面,書上又有:

&

&又說div元素有一個子節點,就是id屬性節點。

所以到底屬性節點是不是子節點?

@小爝@顧軼靈@張立理@司徒正美@Jasin Yip@鄭海波


在舊 DOM 規範中,屬性繼承自 Node,是一種特殊的節點。

$0.attributes[0] instanceof Node
// true
$0.attributes[0].nodeType === Node.ATTRIBUTE_NODE
// true

DOM4 中已廢棄這一條,屬性不再是節點。


元素的屬性在DOM中以Attr類型表示。從技術角度來看,屬性就是存在於attributes屬性中的節點。(你看,屬性節點順口就來了)。屬性節點具有以下特徵:

1.nodeType的值為2;(attributes是一個大房子啊,裡面每一個小鬼nodeType都是2)

2.nodeName的值是屬性的名稱;

3.nodeValue的值是屬性的值;

4.parentNode的值為null;(它只是一個小鬼啊,attributes只是一個屬性對象,並不是父節點哦~不要妄圖根據屬性節點來找父親。很多標籤可以擁有相同的屬性~)

5.在html中沒有子節點;

儘管它們也是節點,但是屬性卻不被認為是DOM文檔樹的一部分。(插個嘴,屬性只是用來描述特性、附帶信息的,就像你的身高、體重、名字一樣一樣的,用來描述你是什麼樣。)

ok。了解了以上信息之後:div元素確實有一個子節點--ATTRIBUTE_NODE。就是attributes屬性啦~!而且裡面有一個id屬性。因此,屬性節點確實是div的子節點。

但是,按照我們平常的理解,子節點一般都是指DOM樹裡面存在的節點,不是嗎。


- 事實1.曾經的DOM規範中,屬性是節點

- 1.1 屬性節點與其所從屬的元素節點,是從屬關係,但並不是父子關係

- 1.2 書上這麼說,div的子節點有屬性節點這個「子節點」,不論對於是什麼時候DOM規範,都是不妥的

- 事實2.新的DOM規範中,屬性不是節點


屬性不是節點啦。

節點只有文本節點和元素節點,屬性是元素節點的屬性。

&

&

確實只有一個節點,然而這個節點是,回車……

你可以把它輸出來看一看嘛


屬性是屬性,你看的什麼書?要麼是你看的不仔細,要麼是書錯了。


推薦閱讀:

fibjs 對比 nodejs 有哪些優點和缺點?
ECMAScript 6 會重蹈 ECMAScript 4 的覆轍嗎?
為何大多數人和新的項目不用 TypeScript 而用 JS + 一堆輔助工具?
IDE中,選中一個變數,文檔中其它地方的該變數也會高亮,這種功能叫什麼?如何實現的?
2017你覺得未來五年最具前景的一門編程語言是什麼?

TAG:前端開發 | HTML | JavaScript | DOM |