JavaScript:$('foo') 对比 document.getElementById('foo')

JavaScript: $('foo') vs document.getElementById('foo')

如果之前有人问过这个问题,请原谅。

我是 JavaScript 的新手,我正在阅读以下博客 post:http://www.dustindiaz.com/javascript-no-no/

他提出的第一点是将 document.getElementByID() 调用移动到 getter 中。这对我来说很有意义,因为它使代码总体上更加模块化和方便。然而,他接着说:

Most will even prefer the classic Prototype $ function that allows you to pass in an arbitrary number of arguments. That works well too.

$('foo', 'bar', 'baz');

不过我没能找到关于此方法的文档,我没看错吗,这等同于调用 document.getElementById(),只是原型可以有多个参数?

如果是这样,使用 document.getElementbyId('foo')$('foo')?

有什么优势

编辑: 我才发现他把 "Prototype" 中的 P 大写了。 Prototype 是某种外部框架吗?我的印象是它就像一条捷径之类的东西。

$('CSS selectors here')这样的符号来自像jQuery(http://jquery.com/) or Prototype (http://prototypejs.org/)这样的框架。

表达式document.getElementById('ID')document.getElementsByTagName('HTML TAG NAME')来自纯原生Java脚本。

您还可以看到类似 document.querySelector() (https://developer.mozilla.org/en-US/docs/Web/API/document.querySelector) 的东西,它也是原生 Java 脚本,但给我们的是 document.getElementById('ID')不要 - select DOM 元素的可能性 CSS select 或 你写的主题的核心是什么关于。

本主题的更复杂比较您可以在此处找到:document.getElementById vs jQuery $()

$('#id') 符号是一个 jQuery 选择器。

它与 document.getElementById('id') 相同,后者是 Javascript 本机选择器。

在 jQuery API 规范 (link) 中,您可以看到每当您使用 $('#id') 选择器时,jQuery 使用 document.getElementById() 引擎盖下。

文章中的PROTOTYPE $指的是Prototype JS框架(link)提供的$函数,不要与[=16混淆=].

Prototype 是(曾经)一个相当常见的 select 元素库,并提供助手,通常围绕操作所述元素。 $ 函数现在通常与 jQuery 相关联,尽管 Prototype 仍然存在并且得到了一定程度的维护(最后一个版本似乎是 2014 年 4 月)。

使用哪个在很大程度上取决于您需要做什么。如果 all 你想要做的是 select 个元素的 ID,那么只需使用 document.getElementById (包装在方法中或根据需要缓存)。它内置于浏览器中,以简单、可靠的方式满足您的需求。如果您不需要依赖项,尤其是像 Protoype 或 jQuery 这样沉重的依赖项,则不要包含它。

但是,如果(或何时)您开始需要更复杂的 selectOR,您可能 必须使用图书馆。 jQuery 和 Prototype 可以处理更复杂的,CSS-like selector 元素 (#foo > li.bar)。对于现代浏览器,DOM 确实支持一些更复杂的 select 或(例如 getElementsByClassName to select by class, or querySelectorAll 提供 CSS select 或),这可能提供足够的灵活性,你永远不需要图书馆。

jQuery 和 Prototype 的一个显着区别是 Prototype 提供的 $ 函数是对 getElementById 的包装,对于复杂的 ( CSS) select 或者。另一方面,jQuery 仅提供 $ 形式并支持所有 select 形式。如果您只需要 Prototype 的 $,那么 getElementById 可能会在没有依赖项的情况下满足您的需求。

请注意,一旦您 select 编辑了元素,Prototype 和 jQuery 也会提供一些帮助程序。例如,您可以 $("#foo").find(".bar").hide() 使用 bar class 隐藏 #foo 中的所有元素。您应该查看每个文档,看看您希望使用多少功能。

这里有一些不同:

$('foo')

这将获取带有 id="foo" 的元素。
使用它,Prototype 将围绕它的功能包装它。
每个参数都是一个不同的元素,具有不同的 id,将被 selected.

这里你使用的是$ (dollar)效用函数。

使用这个:

document.getElementbyId('foo');

您正在 select相同 元素,但是它没有被 包装在任何框架中。
您可以直接访问它。

在内部,$('foo') 将映射到 document.getElementbyId('foo')


这与问题无关,但最好指出来。

这个例子:

$('foo')

可能会与 jQuery framework, passing as the first element a CSS element selector 混淆,后者会 select 所有 <foo> 元素。

这与 Prototype 的 $$ (dollar-dollar) 实用程序具有相同的行为。