如果在像Chrome我这样的网络浏览器浏览器中执行:
$$('span');
我得到的结果与jQuery的结果几乎完全相同:
$('span');
如果在控制台中我查找$$
的定义,我得到:
bound: function ()
{
return document.querySelectorAll.apply(document, arguments)
}
对$
我得到:
function (a,b){return new c.fn.init(a,b)}
我可以在$$
对象上使用jQuery($
)对象无法实现哪些类型的函数?
答案 0 :(得分:7)
$$
是特定于webkit的,应该只在控制台中使用。它有 非常 类似于jQuery的选择器,不同之处在于它将返回 DOM节点的数组,而jQuery将返回 jQuery阵列强>
这两个是相同的:
$$('span');
$('span').get();
jQuery选择器实际上更强大,因为它们添加了dom中不存在的选择器,如:checkbox
,:contains
等。
答案 1 :(得分:4)
WebKit默认将$$
和$
定义为document.querySelectorAll
的简写引用。当jQuery加载时,它用jQuery函数替换$
的值。如果需要,jQuery还会保留原始的$
值。 WebKit这样做是为了引入一个用于查询DOM的一致API,无论你是否使用jQuery。
最大的区别是querySelectorAll
的结果是一个DOM元素数组(一个NodeList - 感谢@lonesomeday),而jQuery是jQuery对象。
答案 2 :(得分:3)
由于$$
只是querySelectorAll
的包装器,因此您可以传递任何有效的选择器。
“我可以对$$对象做什么类型的函数,我不能用jQuery($)对象做什么?”
首先,$$
不是像jQuery这样的对象。 是一个对象,但它只是一个简单的函数对象,它是document.querySelectorAll
的包装器(快捷方式)。它返回它找到的NodeList
个元素。
据我所知,Sizzle并不特别支持的唯一支持是:nth-of-type
。
(当然,当您提供有效的选择器时,Sizzle默认为qsa
,因此您可以将nth-of-type
传递给也支持qsa
的浏览器中的jQuery函数。)< / em>的
使用Sizzle,querySelectorAll
支持不的几个选择器,因此您可以通过jQuery / Sizzle在技术上做得更多。
包括:
:eq()
:gt()
:lt()
:first
:last
:not()
(当您为其提供多个选择器时。:not()
支持简单的qsa
值。) :animated
:input
:button
:checkbox
:even
:odd
:has()
:image
:password
:radio
:reset
:selected
:submit
:text
:visible
...命名几个几个。
请注意,Sizzle 首先尝试使用querySelectorAll
。如果您通过了专有选择器,则默认为Sizzle自己的引擎。
由于qsa
通常比Sizzle快,因此建议考虑上面列出的专有选择器的替代方案,以提高性能。
另请注意,Webkit
除非您将其提供,否则{1}}快捷方式在您的脚本中不可用。
答案 3 :(得分:2)
查看chrome developer tools page,看起来Chrome的开发者工具支持Firebug's command-line API(意味着Firebug也支持$$
)。
$$
州的文档:
$$(选择器)
返回一个数组 与给定CSS匹配的元素 选择器。
大致相当于jQuery(selector)
,其中selector
是CSS选择器,返回类型显然会有所不同。简而言之,你可能没有更多可以用$$
专门做的事情,但是看一下Firebug的命令行API,看起来有一些有用的功能(特别是如果你没有在页面上提供jQuery)
答案 4 :(得分:2)
这是我的一点。在研究方面,我从Safari docs Debugging your WebSite
获得了这个命令行API 部分说明了这一点。
除了通常的JavaScript 方法,功能和 你的脚本中定义的变量 可以输入一些Firebug命令行 API在控制台上以交互方式进行。 支持以下命令 交互:
$ 0- $ 4
包含的变量 当前和前三个选中 Web Inspector中的节点。$(ID)
返回带有的元素 指定的ID。相近 的getElementById()。$$(选择器)
返回数组 与给定CSS匹配的元素 选择。与querySelectorAll类似。$ X(的xpath)
返回数组 与给定XPath匹配的元素 表达
答案 5 :(得分:1)
正如您的问题所示,$$
是document.querySelectorAll
的包装。这意味着当您调用它时它具有相同的选项并且它返回相同的内容。
与$
(jQuery)的差异:
$$
支持浏览器支持的CSS选择器。 $
尽可能使用querySelectorAll
,但它也支持一些自定义扩展程序(例如:has
)。这些不适用于$$
。$$
返回静态NodeList
。这不是一个特别有用的生物。它的行为有点像数组(它具有length
属性,您可以使用[0]
等访问其成员,但没有一个正常的数组方法可用。编写jQuery是为了提供一个包装找到的元素的对象,并且有很多方便的方法。 $$
。$$
将是最快的选择。 $
几乎总是会变慢,而且往往多慢。请注意,Chrome控制台会显示$
的结果和$$
的结果,就像它们是数组一样。既不是;它们只是像数组一样显示,因为这是一种简单的概念化方法。 $$
会返回NodeList
,$
自定义对象。