2014-03-04 33 views
12

爲什麼不getElementsByNamegetElementsByTagNamegetElementsByClassName返回HTMLCollectionW3CMDN),而不是NodeListW3CMDN)?爲什麼document.getElementsBy__方法不返回一個HTMLCollection?

所有這三個回報只有元素的活節點列表:

document.getElementsByName('nameAttrVal'); 
document.getElementsByTagName('div'); 
document.getElementsByClassName('space separated classes'); 

的NodeLists是偉大的,但HTMLCollection s爲更具體,因爲它們只能包含HTML元素。看起來這對於這些方法來說是完美的。

創建集合時,篩選器和根與 集合相關聯。

例如,創建document.images 屬性的HTMLCollection對象時,它將與僅選擇 img元素的過濾器相關聯,並且該根過濾器位於文檔的根目錄。

然後收集表示視圖在 集合的根爲根的子樹的,只包含符合給定 過濾器節點。該視圖是線性的。在沒有對 的具體要求的情況下,相反,集合內的節點必須按樹 的順序進行排序。

- W3C on collections

一對夫婦地方HTMLCollection已被使用:

document.images 
element.children 

NB:querySelectorAll返回非現場NodeList

+1

那麼'qSA'是在這三個API之後幾年定義的,所以我認爲規格設計師同意你的看法。但你現在不能回去改變事情。 –

+1

潛在的重複問題 - [LINK](http:// stackoverflow。com/questions/15763358/difference-between-htmlcollection-nodelists-and-arrays-of-objects) – Quinn

+1

@Quinn,我不確定它是否完全相同,但確實相關。 – zzzzBov

回答

2

的HTMLCollection在很大程度上只包括在DOM規範記錄如何在一個特定的節點添加屬性大多數瀏覽器在DOM引入之前都工作正常。它僅在HTML上下文中有意義,而DOM則是爲HTML和XML一致工作而構建的。 DOM的實現允許省略HTMLCollection及其所有用途,並仍被視爲符合;瀏覽器選擇保持它與舊網站的向後兼容性。

-2

因爲可能存在具有相同名稱或類名以上標籤HTML元素,你可以操縱它作爲DOM對象,而不是HTML類型

與ID或名稱從返回的第一個項目收集「。 W3C

如果試圖趕上事件或修改它就像你可以做到這一點由標識選擇或收集

+0

我不確定你的意思?你能澄清嗎? –

相關問題