Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 身体没有getElementById?_Javascript_Dom - Fatal编程技术网

Javascript 身体没有getElementById?

Javascript 身体没有getElementById?,javascript,dom,Javascript,Dom,这个问题困扰了我很长时间。对不起,如果这是一个愚蠢的问题 以前,我知道可以使用类名获取元素 document.body.getElementsByClassName("foo"); 我太懒了,所以我只是把代码复制粘贴到另一个部分来做这件事 document.body.getElementById("bar"); 我不小心发现它坏了。我做了测试,结果显示 TypeError:对象#没有方法“getElementById” 那么,为什么它有getElementsByClassName和getEl

这个问题困扰了我很长时间。对不起,如果这是一个愚蠢的问题

以前,我知道可以使用类名获取元素

document.body.getElementsByClassName("foo");
我太懒了,所以我只是把代码复制粘贴到另一个部分来做这件事

document.body.getElementById("bar");
我不小心发现它坏了。我做了测试,结果显示

TypeError:对象#没有方法“getElementById”

那么,为什么它有
getElementsByClassName
getElementsByTagName
以及所有类似的方法,但却没有


它们的类型是相同的,所以它们应该有相同的东西。但这里的情况似乎并非如此。

您可以拥有多个具有相同类名的元素,因此缩小搜索范围以从特定节点开始是有意义的

它对id没有意义,因为它应该是唯一的

文档中只能有一个
id
,这就是为什么
getElementById
文档的一种方法

例如:

<body>
    <div id="start">
        <span class="a">
    </div>
    <div class="a">
    </div>
</body>
typeof
只检查类型,不检查值,
document
document.body
都是对象,但不同的对象

typeof document === typeof document.body === typeof null === "object" // true
document === document.body // false!!!

正如您所看到的,
null
document
共享相同的类型,但是它们有相同的方法吗

ID对于整个文档是唯一的,因此将其范围限定到文档的子节点是没有意义的

类名不是唯一的,在某些用例中,在另一个元素下面查找具有类名的元素是有意义的

body.getElementsByClassName('foo')
将获取类名为'foo'但包含在body中的元素


document.getElementsByClassName('foo')
将获取整个文档中类名为'foo'的所有元素,包括
typeof document
typeof document.body
都是相同的,因为它们都是
对象。类型的工作方式与您认为的JS中对象的工作方式不同。不,它们不一样,也没有特别的理由需要支持相同的函数集。(即使是具有相同原型的对象也不必支持相同的函数集,但这是另一回事。)只需在
document
上调用
getElementById
,它就会工作


(“医生,医生,当我将手臂举过头顶并快速旋转8字形时,会很痛!”“是吗?那就停下来。”)

你的
类型的
示例不是比较它们是相同的东西,而是比较它们是相同的“类型”,两者都返回
对象

Firebug控制台的输出:

>>> typeof document
"object"
>>> typeof document.body
"object"
有关
typeof
的更多详细信息,请访问:


typeof
对于两者都是
“object”
,这意味着它们可以是任何类型的对象。它没有告诉你很多关于它们的方法。“它们的类型是相同的,所以它们应该有相同的东西。”不。它们都是对象,但不是所有的对象都共享相同的属性/方法。建议,不要检查javascript中的类型,看看它们是否相同,迭代属性并检查它们。因为
typeof document===typeof document.body==typeof null===typeof[]==“object”
typeof document === typeof document.body === typeof null === "object" // true
document === document.body // false!!!
>>> typeof document
"object"
>>> typeof document.body
"object"