如果在像Chrome这样的webkit浏览器中,我会执行以下操作:

$$('span');

我得到的结果看上去与jQuery几乎完全相同:
$('span');

如果在控制台中寻找$$的定义,则会得到:
bound: function ()
{
    return document.querySelectorAll.apply(document, arguments)
}

对于$我得到:
function (a,b){return new c.fn.init(a,b)}

我不能真正使用jQuery($$)对象执行什么类型的函数?

最佳答案

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



首先,$$不是像jQuery这样的对象。它是一个对象,但这只是一个简单的函数对象,是document.querySelectorAll的包装器(快捷方式)。它返回找到的元素的NodeList

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

(当然,当您提供有效的选择器时,Sizzle默认会默认为qsa,因此您可以在也支持nth-of-type的浏览器中将qsa传递给jQuery函数。)

使用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均未定义$$。除非您使它可用,否则$$快捷方式在脚本中不可用。

    08-19 17:44