使用document.getElementById('id')或$('#id')来选取元素ID仍然必要吗?

6

我今天偶然发现了这个代码片段,在评论中作者提到:

var log = document.getElementById('log');

这是不必要的,因为在Javascript中,您可以使用log来访问DOM元素。这个技巧在所有浏览器上都可行吗?是否有一个名称/参考来描述这种技术?


https://gist.github.com/2992949#gistcomment-398992 - PeeHaa
他没有明确表示是或不是;我很想知道这是否适用于大多数/所有现代浏览器。 - James Lim
4个回答

4
在Internet Explorer中,ID将变成全局变量,并且可以通过该名称在任何地方访问。
我认为这个“缺陷”是一件坏事。
我无法记住所有的特性和方面,我尽力试图假装它从未发生过。
简而言之:仅限于IE的“功能”-最好忽略。阅读此文章以获取更多详细信息:这篇文章

3
@Jim:Chrome 实现了一些 IE 的特性,包括全局的 event 对象。但这并不意味着它是一个好的特性。 - Felix Kling
这里有更多的细节:http://blogs.msdn.com/b/alvar/archive/2009/10/22/internet-explorer-creates-global-variables-for-each-object-in-the-dom.aspx - Jeremy J Starcher
2
@JimLim -- 没想到Chrome复制了它。我仍然坚持我的建议,即忽略它 - Jeremy J Starcher
我完全同意。它会不必要地污染命名空间。 - James Lim

4
令人惊讶的是,实际上这是在HTML5规范中的,所以是的,它将起作用,并且不像之前被认为是一个遗留的特性(至少现在不是了-它曾经只是IE的技巧)。你可以在这里阅读该规范:http://www.whatwg.org/specs/web-apps/current-work/#named-access-on-the-window-object。我同意它实际上会混淆命名空间,并且建议不要使用它-但它将在所有主要浏览器上运行!

你是正确的!相关的W3C规范在这里:http://www.w3.org/TR/html5/browsers.html#named-access-on-the-window-object - James Lim

1

这是一个可疑的“功能”,不应该用于任何事情。它引入了全局状态和全局作用域变量,这是任何应用程序中要避免的主要点,更重要的是似乎只能在Internet Explorer和某些版本的Chrome中使用。它几乎肯定会表现得更差,因为浏览器不仅必须访问DOM,还必须预先查找名为log的变量。


0

对于新版本的现代浏览器,它可能可以正常工作,但旧版本将无法很好地处理它。如果您希望您的网站在旧版浏览器中正常工作,请使用document.getElementById进行操作。


2
这不是现代浏览器的功能,而是来自遗留浏览器的(可疑)功能。 - josh3736
可能会起作用,但这不是重点。这是一个遗留功能,而且没有标准化。 - josh3736
1
我认为最显著的一点是它可以在某些浏览器上运行,但在其他浏览器上则不行。因此,如果您想要尽可能多的兼容性,请不要这样做。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接