jQuery选择器中的冒号的目的是什么?


84

我已经开始使用Wijmo工具包,并且在其文档页面中遇到了很多与此类似的选择器示例:

$(":input[type='radio']").wijradio();

我会这样写我的:

$('input[type=radio]').wijradio();

这些都一样吗?或者我缺少什么?

请注意,上面有两个区别:第一个选择器以冒号作为前缀,并为输入类型加引号。


4
一个是专用:input选择器,而另一个是通用Element选择器。
mellamokb

Answers:


85

:inputjQuery扩展,同时input是CSS选择器。

textareabuttonselect元素将由前者匹配,但不会由后者匹配。

后者速度更快,因此将其用于您的特定radio示例。使用:input当你想“的所有表单元素”,即使他们没有严格的<input>标签。即使在这种情况下,建议还是先使用标准CSS选择器,然后再使用.filter(':input')该选择器。

因为:input是jQuery扩展,而不是CSS规范的一部分,所以使用:input的查询无法利用本机DOM querySelectorAll()方法提供的性能提升。为了在使用:input选择元素时达到最佳性能,请首先使用纯CSS选择器选择元素,然后使用.filter(“:input”)。

在1.7.2源中,:input过滤器针对nodeName测试一个正则表达式:

input: function( elem ) {
            return (/input|select|textarea|button/i).test( elem.nodeName );
},

很有道理,谢谢!类型引号是完全可选的吗?
Morten Mertner

1
老实说,我从未使用过[type=]:input因为如果我要寻找一种特定的类型,那么使用它:input来获取所有这些似乎很漫长。对于纯CSS选择器,我的理解是引号是标准的,但浏览器是宽容的。您可以快速与/测试它没有在这里reference.sitepoint.com/css/css3attributeselectors/demo
大卫Ruttka

所以$(“:checked”)给出了复选框..这也是jquery扩展吗?
维沙尔·沙尔玛(Vishal Sharma)2013年

@David Ruttka:“浏览器是宽容的”仅适用于HTML和怪癖模式下的CSS。该声明不适用于标准模式下的CSS。在某些情况下,可以在法律上省略引号。
BoltClock

我们可以举一个例子first select the elements using a pure CSS selector, then use .filter(":input").吗?
Poutrathor

17

$("input")选择器将选择类型的输入唯一元素

$(":input")选择器将捕获所有输入元素(例如textarea,select,input等)

有关更多信息,请访问有关:input选择器的jQuery官方文档,网址为:

http://api.jquery.com/input-selector/


6

所述:input选择器选择基本上所有form的控制(输入,文本区域,选择和按钮元素),其中如input由标签名选择器选择的所有元素input

由于单选按钮是一个form元素,并且还使用input标签,因此它们都可以用于选择单选按钮。但是,这两种方法查找元素的方式不同,因此每种方法都有不同的性能优势。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.