我可以使用 HTML 元素的 id 作为 JavaScript 中的变量吗? [复制]

Posted

技术标签:

【中文标题】我可以使用 HTML 元素的 id 作为 JavaScript 中的变量吗? [复制]【英文标题】:Can I use the id of an HTML element as a variable in JavaScript? [duplicate] 【发布时间】:2013-11-15 14:12:06 【问题描述】:

意外地,我注意到我可以在 javascript 代码中使用 html 元素的 id。所以不要这样:

var myCanvas = document.getElementById('myCanvas');
myCanvas.width = '600';
myCanvas.height = '400';

我什至连第一行都没有,因为变量myCanvas 显然已经存在!

myCanvas.width = '600';
myCanvas.height = '400';

这很好,但我可以依赖它吗?这是我在所有现代浏览器中都可以期待的正常行为吗?我不关心IE9之前的任何浏览器。

【问题讨论】:

相关:***.com/questions/12510399/… 我怀疑这是常见的行为。但是,你应该重新搜索这个。 它的常见行为但不应该经常使用见***.com/questions/3434278/… 【参考方案1】:

在浏览器脚本的早期,IE 将 ID 和 NAME 属性值变成了引用相关元素的全局对象的属性。这被广泛认为是“坏事”,但被大多数其他浏览器复制以与 IE 兼容(当时大多数网站几乎都是专门为 IE 编写的,拥有大约 95% 的用户份额)。

随后出现了开放标准并齐心协力支持它们。现在没有任何人使用它,尽管它可能仍然被所有正在使用的浏览器支持。

请注意,已声明的同名全局变量优先于同名或 ID 元素。

【讨论】:

【参考方案2】:

我将向您推荐这个answer,并提到这是不是 standard behaviour。所有浏览器都支持这种行为(在怪癖模式之外没有 Firefox),但我不建议使用它。 firefox<14 在标准模式下不支持此功能

【讨论】:

你有 Firefox 声明的链接吗? Firefox 24 在标准模式下支持这种行为,据我所知,这种行为几乎永远存在。关于 Mozilla 是否应该在 1.0 版左右支持它存在巨大的争论,但实用主义赢得了争论。 @RobG 我错了,从 firefox 14 开始支持它tjvantoll.com/2012/07/19/…【参考方案3】:

您可以信赖它。但如果运行站点的语言是 ASP.NET,则使用 ClientID 会更安全。如果控件的 ID 发生变化,你的代码也会随之改变。

例如对于在 ASP.NET 上运行的 Javascript

var myCanvas = document.getElementById("<%=myCanvas.ClientID%>");

【讨论】:

以上是关于我可以使用 HTML 元素的 id 作为 JavaScript 中的变量吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我使用 id 作为标识符来查找元素,但异常堆栈跟踪显示 css 选择器 [重复]

为啥 HTML 中不允许重复的 ID 值?

查找元素的ID [关闭]

Java Script

htmlDocument.GetElementById 返回具有相同名称的元素,而不是 id

是否可以使用 SVG 矩形作为具有可变高度的 HTML 元素的边框