webkit的`$$`返回和jQuery` $`返回有什么区别?

时间:2011-07-06 17:46:10

标签: javascript dollar-sign

如果在像Chrome我这样的网络浏览器浏览器中执行:

$$('span');

我得到的结果与jQuery的结果几乎完全相同:

$('span');

如果在控制台中我查找$$的定义,我得到:

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

$我得到:

function (a,b){return new c.fn.init(a,b)}

我可以在$$对象上使用jQuery($)对象无法实现哪些类型的函数?

6 个答案:

答案 0 :(得分:7)

正如你所说,

$$是特定于webkit的,应该只在控制台中使用。它有 非常 类似于jQuery的选择器,不同之处在于它将返回 DOM节点的数组,而jQuery将返回 jQuery阵列

这两个是相同的:

$$('span');

$('span').get();

jQuery选择器实际上更强大,因为它们添加了dom中不存在的选择器,如:checkbox:contains等。

参考:JQuery Selectors

答案 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$自定义对象。