HTML DOM中存在ID重复的元素时javascript getElementById()的行为?
当HTML DOM中存在具有重复ID的元素时,是否有人可以解释javascript getElementById()的行为???虽然没有定义标准行为,但通常会返回找到的第一个元素HTML DOM中存在ID重复的元素时javascript getElementById()的行为?,javascript,Javascript,当HTML DOM中存在具有重复ID的元素时,是否有人可以解释javascript getElementById()的行为???虽然没有定义标准行为,但通常会返回找到的第一个元素 演示:是。它将返回到第一个。我们不能使用与HTML属性相同的ID 1. * 是否查看从纯拷贝到剪贴板打印 * { margin: 0; padding: 0; } #container * { border: 1px solid black; } #container
演示:是。它将返回到第一个。我们不能使用与HTML属性相同的ID
1. * 是否查看从纯拷贝到剪贴板打印
* {
margin: 0;
padding: 0;
}
#container * {
border: 1px solid black;
}
#container {
width: 960px;
margin: auto;
}
对于初学者来说,在我们进入更高级的选择器之前,让我们先把那些显而易见的选项去掉
星号将指向页面上的每个元素。许多开发人员将使用此技巧将边距和填充归零。虽然这对于快速测试来说当然很好,但我建议您不要在生产代码中使用它。它在浏览器上增加了太多的重量,这是不必要的
*也可与子选择器一起使用。
是否查看从纯拷贝到剪贴板打印
* {
margin: 0;
padding: 0;
}
#container * {
border: 1px solid black;
}
#container {
width: 960px;
margin: auto;
}
这将针对作为#container div的子元素的每一个元素。同样,如果可能的话,尽量不要使用这种技术
X
是否查看从纯拷贝到剪贴板打印
* {
margin: 0;
padding: 0;
}
#container * {
border: 1px solid black;
}
#container {
width: 960px;
margin: auto;
}
将哈希符号作为选择器的前缀可以让我们按id设置目标。这是最常见的用法,但是在使用id选择器时要小心。具有相同id的多个对象是非法的。因为不允许这样做,
getElementById()的行为
规范中未指定存在多个匹配项。事实上,明确表示:“如果有多个元素具有此ID,则不会定义行为。”
在我尝试过的几个浏览器中,它返回第一个,但显然你不应该依赖它
如果要查找所有匹配项,必须设计一个查询,查看所有标记的ID并收集与您的标记匹配的ID
在纯javascript中,您可以这样做:
function getAllElementsById(id) {
var all = document.getElementsByTagName("*");
var results = [], elem;
for (var i = 0; i < all.length; i++) {
elem = all[i];
if (elem.id && elem.id === id) {
results.push(elem);
}
}
return(results);
}
函数getAllegementsById(id){
var all=document.getElementsByTagName(“*”);
var结果=[],元素;
对于(变量i=0;idocument.querySelectorAll("[id='myid']")
但是,如果您可以控制它,您应该只修复HTML。是的,行为是未定义的 标记无效,并且没有标准定义浏览器在这种情况下应该做什么
每个浏览器都会尝试做一些合理的事情,通常会返回第一个元素。其他可能的处理方法是返回最后一个元素,不返回任何元素(null),或抛出错误。谢谢Ayman,有没有办法列出所有具有指定id的元素?出于好奇,规范中是否定义了这种行为?或者它是未指明的,但大多数(如果不是全部)浏览器都是这样的?有人(看不到谁,发布了这个链接,然后删除了这个帖子:)。不管是谁,谢谢……就像@RabNawaz说的,ID必须是唯一的。您可以有多个元素具有相同的
名称
和类
属性。关键是您不能依赖行为,即使当前的所有实现都以相同的方式进行。浏览器供应商总是试图制作更好的浏览器,因此任何新的浏览器都不太可能尝试以不同的方式来实现它。请在JSFIDLE中尝试。如果有人真的发布了各种浏览器如何处理这个问题的测试结果,我还没有找到。假设,如果~所有浏览器都一致地处理它,那么这将不是我们第一次有一个新标准的坚实基础,或者至少是一个我们都可以使用的事实上的标准。ID“必须”是唯一的,但不保证、不强制执行,甚至在发生时抛出任何警告或错误,这一直困扰着我。除非后者突然出现,否则我建议我们可以放弃前者。