为什么函数getElementsByClassName()
适用于javascript对象,但“getElementById”会反击“不是函数”?
var divBox= makeDivBox(divParams);
var divContents = divBox.getElementById("divID");
错误: divBox.getElementById不是函数
但是:
var divContents = divBox.getElementsByClassName("divClass")[0];
没有问题。为什么呢?
编辑:see similar由@rajuGT提供
答案 0 :(得分:1)
这是因为id
对于页面/文档应该是唯一的。
因此,从文档和元素调用应始终相同。因此,为其他DOM节点提供方法根本没用,因此getElementById
不可用/添加到其他DOM元素。
其中getElementsByClassName
在document
节点上调用时返回给定className的所有DOM元素。如果使用任何其他DOM元素调用,则仅返回具有给定className DOM节点的子节点。这里,与getElementById相比,行为是不同的,因此该方法可用于所有DOM节点。
答案 1 :(得分:1)
您似乎有几个问题。
divBox.getElementById("divID");
无法正常工作,因为getElementById()
只是document
对象上的一种方法。它不是其他类型对象的方法。因此,divBox
元素没有该方法。如果整个文档中只有一个document.getElementById("divID")
并且divID
已经插入到文档中,则可以使用divBox
。
var divContents = divBox.getElementsByClassName("divClass")[0];
有效,因为.getElementsByClassName()
是所有DOM对象上的一种方法,因此当您在divBox
上调用它时,它就可以正常工作。
您可以像getElementById()
一样致电document.getElementById("someID")
。
如果要在子树的特定部分中查找内容,可以使用element.querySelectorAll("#someID")
,或者如果要使用给定标识符的多个对象,则可以使用类名并使用函数查找具有给定类名的对象。
关于您的具体问题:
divBox.getElementById不是函数
这是因为geetElementById()
只是document
对象上的一个方法,而divBox
不是document
对象,所以它没有那个方法,因此你得到了你看到的错误。
为什么这没有问题:?
var divContents = divBox.getElementsByClassName("divClass")[0];
这显然是因为divClass
是一个类名,而不是一个id值,所有HTML元素都包含getElementsByClassName()
方法,因此您可以在divBox
上调用它。