为什么我不能在javascript元素上调用getElementById?

时间:2015-11-09 21:34:44

标签: javascript html dom

为什么函数getElementsByClassName()适用于javascript对象,但“getElementById”会反击“不是函数”?

var divBox= makeDivBox(divParams);
var divContents = divBox.getElementById("divID");
  

错误: divBox.getElementById不是函数

但是:

var divContents = divBox.getElementsByClassName("divClass")[0];

没有问题。为什么呢?

编辑:see similar由@rajuGT提供

2 个答案:

答案 0 :(得分:1)

这是因为id对于页面/文档应该是唯一的。

因此,从文档和元素调用应始终相同。因此,为其他DOM节点提供方法根本没用,因此getElementById不可用/添加到其他DOM元素。

其中getElementsByClassNamedocument节点上调用时返回给定className的所有DOM元素。如果使用任何其他DOM元素调用,则仅返回具有给定className DOM节点的子节点。这里,与getElementById相比,行为是不同的,因此该方法可用于所有DOM节点。

答案 1 :(得分:1)

您似乎有几个问题。

  1. divBox.getElementById("divID");无法正常工作,因为getElementById()只是document对象上的一种方法。它不是其他类型对象的方法。因此,divBox元素没有该方法。如果整个文档中只有一个document.getElementById("divID")并且divID已经插入到文档中,则可以使用divBox

  2. var divContents = divBox.getElementsByClassName("divClass")[0];有效,因为.getElementsByClassName()是所有DOM对象上的一种方法,因此当您在divBox上调用它时,它就可以正常工作。

  3. 您可以像getElementById()一样致电document.getElementById("someID")

    如果要在子树的特定部分中查找内容,可以使用element.querySelectorAll("#someID"),或者如果要使用给定标识符的多个对象,则可以使用类名并使用函数查找具有给定类名的对象。

    关于您的具体问题:

      

    divBox.getElementById不是函数

    这是因为geetElementById()只是document对象上的一个方法,而divBox不是document对象,所以它没有那个方法,因此你得到了你看到的错误。

      

    为什么这没有问题:?

    var divContents = divBox.getElementsByClassName("divClass")[0];
    

    这显然是因为divClass是一个类名,而不是一个id值,所有HTML元素都包含getElementsByClassName()方法,因此您可以在divBox上调用它。