CSS选择器和jQuery过滤器之间的区别?

时间:2012-04-02 20:24:17

标签: jquery css jquery-selectors css-selectors

可以将CSS选择器传递给jQuery函数,例如:

jQuery('h1 + h2');

jQuery还有一些过滤器,例如:even:odd

jQuery('tr:even');

我正在寻找某种区分这两者的语法规则,我想可能jQuery过滤器总是使用:

但是,有些CSS selectors也使用了:。例如:

  • :last-child
  • :root
  • :empty
  • :target

有没有人知道它是CSS选择器还是正在使用的jQuery过滤器?

3 个答案:

答案 0 :(得分:7)

  

我正在寻找某种区分这两者的语法规则,我想可能jQuery过滤器总是使用:

     

但是,一些CSS选择器也使用:

  

有没有人知道它是CSS选择器还是正在使用的jQuery过滤器?

这是关于选择器库在其自己的扩展中采用CSS语法最烦人的事情之一:因为基于匹配的过滤器和真正的伪类都被称为“伪选择器”的伞形术语(基本上是表示“以:开头的选择器”,判断“伪选择器”是过滤器还是真正的简单选择器的唯一方法是知道它的作用,如果你不熟悉选择器,通常意味着在这里引用其他人提到的jQuery documentation。您会注意到,大多数这些基于匹配的过滤器在其描述中的某处都会显示“匹配”一词;这是一个合理的指标,“伪选择器”作为基于匹配的过滤器。

jQuery中有一个名为Basic Filters的选择器子类别,但名称完全是误导性的,选择器本身分类不佳;并非所有这些都是实际的过滤器,但其中一些功能类似于标准的伪类!至少jQuery Extensions类别具有正确的名称 - 因为这些选择器是非标准的。

我称之为“基于匹配的过滤器”基本上是一个选择器,它匹配基于导致该选择器的整个复杂选择器的元素。声音混乱?那是因为它是。

事实上,为了便于参考,这里有一个jQuery选择器列表,它们可以作为基于匹配的过滤器使用:

这些选择器返回一组匹配中的第n个元素,而不是其他标准选择器,它们采用每个元素并仅根据DOM提供的有关元素的信息来推断它是什么,或者否则,而不是基于选择器字符串的其余部分。虽然它们经常与:first-child:last-child:nth-child():nth-last-child()进行比较,但它们在功能方面却大不相同。选择使用哪个选择器要非常小心。

例如,以下选择器,使用jQuery的:first

$('ul > li:first')

仅匹配一个元素:匹配选择器ul > li的第一个元素,无论DOM中有多少ulli个元素。这个选择器表示法可以写成方法调用,如下所示:

$('ul > li').first()

这使得它实际上做得更清楚。它与:first-child不同:

$('ul > li:first-child')

因为:first-child会选择其父li的第一个孩子的每个ul,因此可能会返回一个或更多 {{1元素,而不是li的唯一元素。

另外值得一提的是:first选择器;虽然我不认为它是与上述选择器相同的过滤器,但重要的是要记住jQuery从CSS实际提供的内容中扩展它。差异详见this question。我想它无论如何都被归类为基本过滤器,因为.not(),它绝对是所有意图和目的的过滤方法,以及.filter()的对立面。

答案 1 :(得分:0)

是的,该选择器存在于jQuery中 选择器名为next adjacent selector

您可以看到完整的选择列表here

  

有没有人知道它是CSS选择器还是正在使用的JQuery过滤器?

我的提示,检查API,选择是否存在......

答案 2 :(得分:0)

jQuery选择器实用程序函数的想法是接受任何css选择器(包括css3选择器),并且除此之外还添加一些未在css规范中定义的额外内容(其示例为:odd(其中)有效的css是:nth-​​child(odd))和:not(selector)例如)。强烈建议不使用jquery特定的选择器,除非真的有必要,因为本地css选择器可以处理(在现代webbrowsers中)比自定义jquery css快得多。正如gdoron已经提到的,如果您需要检查特定选择器是否可用,您可以在jquery documentation中看到完整列表,您也可以在那里找到自定义选择器。