Jquery中#的必要性是什么?

7
如果我的html如下所示:
<div id="TestHash"> </div>

我可以通过 $("#TestHash") 或者 $(TestHash) 来访问它。两种方式的结果都相同。 那么没有 # 的元素用法是什么?


两者不会得到相同的结果。请仔细检查。第二个选择器会抛出错误,因为TestHash被用作变量。 - Milind Anantwar
1
$(TestHash) 应该存在错误。 - Harry Bomrah
1
它们不相同。它们可能产生相同结果的唯一可能性是在第二个之前有var TestHash = $("#TestHash")var TestHash = document.getElementById("TestHash") - rrk
1
@RejithRKrishnan Id被添加到全局对象作为属性。这种方式比较古老,但它依然有效。 - AliciaBytes
3
实际上这是一个非常合理的问题。我也刚注意到这种奇怪的行为!感谢你提出来。+1。 - Gogol
显示剩余10条评论
1个回答

6

实际上,在Javascript中存在一个遗留物 - 带有ID的元素会自动填充全局命名空间。

这就是为什么你可以直接访问它 ($(TestHash))。然而,这是遗留浏览器中留下来的一个被误解的部分,因此不应该依赖它。

在可能的情况下,始终使用 $("#myId") 版本。


我总是只使用 # 选择器。我看到一些没有选择器的代码,但却没有任何异常,这让我很惊讶。它能正常工作,我需要知道它是如何工作的。这就是我在这里发布主题的原因。 - Suresh
1
没错,避免使用它是个好主意。我认为它不会很快从浏览器的功能中删除,但当你开始模块化你的js等时,它会引起问题。 - Chris
我本来也想自己写一个答案并链接到一些更详细的资源,但是惊讶地发现很难找到任何相关信息... 我所知道的唯一一件事就是它在《JavaScript权威指南(第6版)》的第14.7章节中。 - AliciaBytes
1
同上 - 我找不到更多的信息 - 我只是从很久以前记得它。 - Chris

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