2017-02-10 58 views
3

爲什麼document.body.getElementById(idOfElem)document.body.getElementsByName(nameOfElem)無法正常工作?爲什麼getElementById在文檔以外的元素上不起作用?

爲什麼document.body.getElementByTagName(tagOfElem)document.body.getElementByClassName(classOfElem)工作?

在使用第一個,瀏覽器引發此錯誤:

TypeError: document.body.getElementById is not a function[Learn More]

+3

放下'body'部分。它只是'document.getElementById' – j08691

+0

使用'document.getElementById()',如果'idOFelem'不是變量use'「idOFelem」' –

+1

@Teemu OP不問這些方法是幹什麼的。相反,OP對'getElementById'在'body'對象上不可用的困惑,但另一些是。 – evolutionxbox

回答

2

getElementByIddocument的方法,而不是document.bodygetElementsByName也是如此。

另一方面,可以在包括body的任何元素上調用getElementByTagNamegetElementByClassName

+0

document.body.getElementsByName(idOFelem)不工作? 爲什麼document.body.getElementByTagName(idOFelem)工作?爲什麼document.body.getElementByClassName(idOFelem)工作? – hamidreza

+0

@hamidreza'.getElementById'只是'document'的一個方法,你列出的其他方法也是'document.body'的方法。這就是DOM。 – evolutionxbox

3

由於ID是唯一的,所以必須使用document.getElementById,因爲它是唯一具有該功能的DOM元素。比document其他

元素具有以下功能:getElementsByTagNamegetElementsByClassNamequerySelectorquerySelectorAll但不是getElementById

爲什麼不在文檔以外的元素上定義它?

無論父母是什麼,具有ID的元素都是唯一的。因此,在使用它的ID獲取該元素之前,不必知道元素的父元素。所以,沒有必要在所有元素上放置函數getElementById,只需要在document就足夠了。

爲什麼定義了其他函數?

因爲你有時需要得到<div> S或<p> S或元素的一些類.cls,只有當他們是一個已知的元素中。然後,如果使用document作爲根,則結果將是文檔中的所有元素,而不僅僅是所需元素中的元素。

結論:

document.getElementById總會返回至多有一個元素,因此爲什麼重新定義每一個DOM元素(這將是無用的)。但是其他功能,如getElementsByTagNamegetElementByClassName,...可能會返回儘可能多的。因此,我們將它們放在所有元素上,以便通過指定根來開始搜索來縮小搜索範圍。

+0

document.body.getElementsByName(idOFelem)不工作? 和 爲什麼document.body.getElementByTagName(idOFelem)工作?爲什麼document.body.getElementByClassName(idOFelem)工作? – hamidreza

+0

@hamidreza檢查新的更新! –

+0

當然!爲什麼元素會有一個id選擇方法? – evolutionxbox

0

document.body.getElementById()不存在。 使用document.getElementById()從文檔中獲取具有匹配標識的元素。

document.getElementsByTagName() - 獲取與文檔中標籤名稱匹配的所有元素。

相關問題