包含多个元素的Javascript文档.getElementById()

包含多个元素的Javascript文档.getElementById(),javascript,html,dom,getelementbyid,Javascript,Html,Dom,Getelementbyid,当有多个元素具有相同的ID时,document.getElementById()如何处理它?简单地说: 通过元素的ID返回对元素的引用 在文件的“注释”部分,我希望提及应该发生的事情,所述内容如下: 如果没有具有给定id的元素,则此函数返回null 所以我决定自己去发现,我在Chrome的开发控制台上做了一个测试。以下是我得到的: > document.write('<div id="myid"></div>') > document.getElementBy

当有多个元素具有相同的ID时,
document.getElementById()如何处理它?简单地说:

通过元素的ID返回对元素的引用

在文件的“注释”部分,我希望提及应该发生的事情,所述内容如下:

如果没有具有给定id的元素,则此函数返回null

所以我决定自己去发现,我在Chrome的开发控制台上做了一个测试。以下是我得到的:

> document.write('<div id="myid"></div>')
> document.getElementById("myid")
<div id="myid"></div>
> document.write('<span id="myid"></span>')
> document.getElementById("myid")
<div id="myid"></div>
>document.write(“”)
>document.getElementById(“myid”)
>文件。写入(“”)
>document.getElementById(“myid”)

似乎它只返回第一个值-有人能澄清一下吗?

MDN没有说明会发生什么,因为这在第一个地方是非法的


ID必须唯一

MDN没有说明发生了什么,因为这首先是非法的


ID必须唯一

不同的浏览器可能返回不同的内容,因为具有重复的ID首先不是有效的HTML


这是未定义的行为。

不同的浏览器可能返回不同的内容,因为具有重复的ID首先是无效的HTML


这是未定义的行为。

我不能为所有浏览器说话,但我能够多次使用相同的ID,前提是它们是唯一ID项的子项:

<div id="parent1">
    <div id="item"></div>
</div>
<div id="parent2">
    <div id="item"></div>
</div>

我不能代表所有浏览器,但我已经能够多次使用相同的ID,前提是它们是唯一ID项的子项:

<div id="parent1">
    <div id="item"></div>
</div>
<div id="parent2">
    <div id="item"></div>
</div>

由于代码的运行方式,它将返回文档中ID为的第一个元素。
从逻辑上讲,存在两个id相同的元素是非法的。因此,为什么要寻找另一个id相同的元素作为已经找到的元素,应该只有一个id相同的元素。大多数浏览器从上到下扫描文档,因此,将返回具有匹配ID的第一个元素。

由于代码的运行方式,它将返回文档中具有ID的第一个元素。
从逻辑上讲,存在两个id相同的元素是非法的。因此,为什么要寻找另一个id相同的元素作为已经找到的元素,应该只有一个id相同的元素。大多数浏览器从上到下扫描文档,因此返回具有匹配id的第一个元素。

id应该是唯一的!对于浏览器在WRT无效代码中的行为,没有文档记录。也就是说,一般来说,他们会返回第一场比赛。需要理解的重要一点是,这种行为并不能保证。@CookieMonester-HTML5规范的大部分都用于描述浏览器在无效代码下的行为。然而,在本例中,DOM4规范定义了当存在多个匹配的元素ID时浏览器如何处理getElementById()。ID应该是唯一的!对于浏览器在WRT无效代码中的行为,没有文档记录。也就是说,一般来说,他们会返回第一场比赛。需要理解的重要一点是,这种行为并不能保证。@CookieMonester-HTML5规范的大部分都用于描述浏览器在无效代码下的行为。然而,在本例中,DOM4规范定义了当存在多个匹配的元素ID时浏览器如何处理getElementById()。True(显然),但您是否也可以引用源代码来增强您的语句。True(显然),但您是否也可以引用源代码,我知道拥有重复的ID是无效的,我并不是说我在代码中这样做。。。但是浏览器不应该“原谅”坏代码吗?@cloudcoder2000是的,有点。。。嗯,我想他们会接受像
text
这样的东西,但你只能走这么远……我知道重复ID是无效的,我并不是说我在代码中这样做。。。但是浏览器不应该“原谅”坏代码吗?@cloudcoder2000是的,有点。。。嗯,我想他们会接受像
text
这样的东西,但你只能做到这一点……正如我所说,大多数浏览器都会从上到下扫描/解析。大多数开发人员会让浏览器停在ID为的第一个元素上,因为W3C标准规定,两个元素具有相同ID是非法的,所以技术上不应该有另一个元素具有相同ID,所以为什么要继续搜索,这只会浪费CPU。但也有一些例外,因为大多数并不意味着全部。@user2864740-对于您和这里所有说行为未定义的人来说,和都说“getElementById(elementId)方法必须按树的顺序返回上下文对象树中ID为elementId的第一个元素,如果没有,则返回null。”@阿洛奇很有趣。这将是一个很好的答案(至少值得一提的是,展望未来),正如我所说,大多数浏览器都会从上到下扫描/解析。大多数开发人员会让浏览器停在ID为的第一个元素上,因为W3C标准规定,两个元素具有相同ID是非法的,所以技术上不应该有另一个元素具有相同ID,所以为什么要继续搜索,这只会浪费CPU。但也有一些例外,因为大多数并不意味着全部。@user2864740-对于您和这里所有说行为未定义的人来说,和都说“getElementById(elementId)方法必须按树的顺序返回上下文对象树中ID为elementId的第一个元素,如果没有,则返回null。”@阿洛奇很有趣。这将是一个很好的答案(至少值得一提的是,展望未来)。