检查这个 jsfiddle,看看控制台。$$
没有定义。现在,打开一个全新的窗口,并进入$$
控制台。它定义了一个函数,用于获取与选择器匹配的所有 dom 元素的(类似 jquery 的)数组:
> $$
bound: function () {
return document.querySelectorAll.apply(document, arguments)
}
这是由开发工具添加的吗?在 Firefox 中使用 Firebug 时也会出现它。它是由工具本身在内部使用吗?
检查这个 jsfiddle,看看控制台。$$
没有定义。现在,打开一个全新的窗口,并进入$$
控制台。它定义了一个函数,用于获取与选择器匹配的所有 dom 元素的(类似 jquery 的)数组:
> $$
bound: function () {
return document.querySelectorAll.apply(document, arguments)
}
这是由开发工具添加的吗?在 Firefox 中使用 Firebug 时也会出现它。它是由工具本身在内部使用吗?
首先,ziesemer 的答案中的所有内容都是正确的。
在各种浏览器的 devtools 控制台中有许多可用的功能。这些方法统称为命令行 API(离线)(新链接),它们都源自 Firebug。现在,我们在浏览器之间只有奇偶校验,因为 Firebug 做的事情(大部分)是正确的。
但是在创建 Firebug 时(2006 年),风靡一时的 JavaScript 库是 Prototype.js。$
被 Prototype 抓取了一些getElementById()
语法糖,因为这当然是抓取元素的最快方式,也是当时最常见的元素获取技术。这太节省时间了,人们使用整个库只是为了 $ Sugar。
2006 年初,jQuery 首次亮相,用于$()
基于 css 选择器选择任何元素。正如我旧的CSS Selector Engine Timeline 帖子所示,Prototype 在四天后跟进了他们自己的,但正如$
他们刚刚访问的库中已经采取的那样$$()
,现在被称为bling-bling 函数。
所以 Firebug 正在利用 Prototype 的 API,因为它在 2006 年仍然占据主导地位。现在,在 jQuery 和后 jQuery 别名(如 )的时代window.$ = document.querySelectorAll.bind(document)
,我们认为它非常落后。有趣的是,当 Opera 彻底改变他们的浏览器开发工具 Dragonfly 时,他们选择$
作为他们的querySelectorAll
别名,以更好地匹配当今的实践,IMO 更有意义。
现在,您询问了$$
DevTools 中的“来源”,我解释了历史。oop!至于为什么它在您的控制台中可用......所有命令行 API(离线)(新链接)方法仅在您的控制台上下文中可用,就像便利方法一样。
copy()
是我的最爱之一;我在这个面向高级用户的 JavaScript 控制台视频中介绍了它和其他内容。
好吧,Firebug Lite将其定义为:
this.$$=function(selector,doc){if(doc||!FBL.Firebug.chrome){return FBL.Firebug.Selector(selector,doc)
(见来源。)
Firebug 的完整版将其定义为
this.$$ = function(selector)
{
return FBL.getElementsBySelector(baseWindow.document, selector);
};
这实际上是记录在案的,是的,它也在内部使用。
所以我假设谷歌浏览器正在做类似的事情。