8

如果在像 Chrome 这样的 webkit 浏览器中,我会这样做:

$$('span');

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

$('span');

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

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

$得到:

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

我可以对 jQuery ( ) 对象$$无法真正执行的对象执行哪些类型的函数?$

4

6 回答 6

7

$$正如您所说,是特定于 webkit 的,应该只在控制台中使用。它具有与 jQuery非常相似的选择器,不同之处在于它将返回一个DOM 节点数组,而 jQuery 将返回一个jQuery 数组

这两个是相同的:

$$('span');

$('span').get();

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

参考:JQuery 选择器

于 2011-07-06T17:50:51.850 回答
4

WebKit 将$$$默认情况下定义为对document.querySelectorAll. 当 jQuery 加载时,它用$jQuery 函数替换 的值。$如果需要,jQuery 还会保留原始值。WebKit 这样做是为了引入一致的 API 来查询 DOM,无论您是否使用 jQuery。

最大的区别在于结果querySelectorAll是一个 DOM 元素数组(一个 NodeList - 感谢@lonesomeday),而 jQuery 是 jQuery 对象。

于 2011-07-06T17:53:17.550 回答
3

由于$$它只是 的包装器querySelectorAll,因此您可以传递任何有效的选择器。

“我可以在 $$ 对象上执行哪些类型的函数,而我无法用 jQuery ($) 对象执行这些函数?”

首先,$$不是 jQuery 之类的对象。它一个对象,但它只是一个简单的函数对象,它是document.querySelectorAll. 它返回一个NodeList它找到的元素。

据我所知,它唯一支持但 Sizzle 没有特别支持的是:nth-of-type.

(当然 Sizzle 默认是qsa在你提供一个有效的选择器时,所以你可以nth-of-type在也支持的浏览器中传递给 jQuery 函数qsa。)

使用 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没有$$任何地方定义。除非您使快捷方式可用,否则该快捷方式在您的脚本中不可用。$$

于 2011-07-06T17:57:51.867 回答
2

查看chrome 开发者工具页面,看起来 Chrome 的开发者工具支持Firebug 的命令行 API(意味着 Firebug 也支持$$)。

状态的文档$$

$$(选择器)

返回与给定 CSS 选择器匹配的元素数组。

这大致相当于jQuery(selector), CSS 选择器在哪里selector,返回类型显然会有所不同。简而言之,您可能没有什么可以专门用$$.

于 2011-07-06T17:53:07.727 回答
2

这是我的一点。在研究时,我从 Safari docs Debugging your WebSite中得到了这个

命令行 API部分是这样说的。

除了常用的 JavaScript 方法以及脚本中定义的函数和变量之外,您还可以在控制台中以交互方式输入一些 Firebug 命令行 API。以交互方式支持以下命令:

$0-$4
包含 Web Inspector 中当前和前三个选定节点的变量。

$(id)
返回具有指定 ID 的元素。类似于 getElementById()。

$$(selector)
返回匹配给定 CSS 选择器的元素数组。类似于 querySelectorAll。

$x(xpath)
返回与给定 XPath 表达式匹配的元素数组。

于 2011-07-06T17:59:10.850 回答
1

正如您的问题所示,$$document.querySelectorAll. 这意味着当您调用它时它具有相同的选项并且它返回相同的东西。

$(jQuery)的区别:

  • $$支持浏览器支持的 CSS 选择器。$尽可能使用querySelectorAll,但它也支持一些自定义扩展(例如:has)。这些将不适用于$$.
  • $$返回一个静态的NodeList。这不是一个特别有用的生物。它的行为有点像一个数组(它有一个length属性,你可以用[0]etc 访问它的成员),但是没有一个普通的数组方法可用。编写 jQuery 是为了提供一个对象来包装找到的元素,并且有很多方便的方法。这些都不存在于$$.
  • $$将是最快的选择,几乎总是如此。 $几乎总是会变慢,而且通常会慢得多

请注意,Chrome 控制台将显示结果$和结果,$$就好像它们是数组一样。既不是; 它们只是像数组一样显示,因为这是将它们概念化的简单方法。$$返回一个自定义对象NodeList$

于 2011-07-06T17:57:57.323 回答