javascript – Document.getElementById()返回名称等于id指定的元素

我之前在this SO中提到过该文档中IE6 / 7(以及某些版本的Opera)的有趣行为.getElementById可以找到一个元素,其name属性已定义但不是id属性,这样

function f() {
    document.getElementById("a1").value = ...;
}
...

实际上适用于这些版本.

通过网络搜索我发现了Chris Bloom的this bug report,其中名为Milo van der Leij的用户指出了以下内容(由他在this w3c spec中提到):

在他们的辩护中:“id和name属性共享相同的名称空间.”

id和name属性共享同一名称空间是什么意思?为什么这个条件足以让IE6 / 7 / Opera在他们的JS引擎中实现这种行为?

最佳答案
术语“相同名称空间”意味着名称和ID不是完全分开的.您可以在一个特定对象上使用相同的名称和ID,但不能在一个对象上使用name =“foo”而在另一个对象上使用id =“foo”.这造成了冲突.

这就是那些浏览器决定实现的方式.每个元素都有一个全局变量,其id包含dom元素.这就是他们实施的方式.它不是标准的,它不是在更现代的浏览器中完成的方式(除了一些向后兼容性).

对要检索的任何DOM元素使用id值.在已过帐表单中使用名称值进行服务器标识.

如果您不在一个对象上使用id而在另一个对象上使用相同的名称,那么您的代码名称和ID之间不会发生冲突,并且通常不会给予特定元素相同的名称和ID.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些