Chrome/Firefox 中双元符号选择器查询功能的来源是什么?

IT技术 javascript google-chrome firebug google-chrome-devtools
2021-03-16 16:47:06

检查这个 jsfiddle,看看控制台。$$没有定义。现在,打开一个全新的窗口,并进入$$控制台。它定义了一个函数,用于获取与选择器匹配的所有 dom 元素的(类似 jquery 的)数组:

> $$

bound: function () {
  return document.querySelectorAll.apply(document, arguments)
}

这是由开发工具添加的吗?在 Firefox 中使用 Firebug 时也会出现它。它是由工具本身在内部使用吗?

2个回答

首先,ziesemer 的答案中的所有内容都是正确的。

这都是关于 JavaScript 的历史

在各种浏览器的 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 控制台视频中介绍了它和其他内容

最后几个链接坏了。
2021-04-26 16:47:06
啊英语的歧义..我确实是指历史来源,但很高兴它允许两个答案。再次感谢!
2021-05-09 16:47:06
这个答案值得更多赞誉,并在 SO 名人堂中占有一席之地。顺便说一下@PaulIrish,时间顺序数据的来源是什么?即:“原型然后在四天后用他们自己的方式跟进”。听起来这可能是畅销书;“Javascript:意外的旅程”。
2021-05-16 16:47:06
浏览器源代码变化很快,因此深度链接注定会变得陈旧。链接内容可以与代码搜索工具一起使用以查找源代码。Chrome DevTools 的相关代码在这里。code.google.com/p/chromium/codesearch#chromium/src/third_party/... 当 Blink 和 Chromium 存储库合并时,链接很可能会中断。我认为 src/third_party/WebKit 会变成 src/blink。就像我说的,源代码的深层链接注定会很快过时!
2021-05-18 16:47:06

好吧,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);
};

这实际上是记录在案的,是的,它也在内部使用。

所以我假设谷歌浏览器正在做类似的事情。

@minikomi - 谷歌浏览器不是开源的,所以除非谷歌有人可以插话,否则我们需要求助于铬。我为此检查了来源,但无法立即找到任何类似的参考资料。但是,我猜这可能存在于 Chrome 而不是 Chromium 中...
2021-05-04 16:47:06
好点子。我得到了谷歌代码,但忘记了搜索被取消了..但是,由于两者返回的函数几乎相同,因此可以安全地假设它是源代码!谢谢!
2021-05-04 16:47:06
我认为可能是这种情况。在我标记正确之前,任何人都可以检查 chrome 源吗?
2021-05-19 16:47:06