文本大小写是否敏感?

6
jQuery的:text选择器区分大小写吗?
例如:
<input type="TEXT">

不匹配,但是:

<input type="text">

匹配成功。

看起来是这样。我只是在寻求验证。

编辑

在Chrome和Firefox中,即使[type=text]选择器也区分大小写,但在IE8(IE8文档模式下)中不区分大小写。


1
不,它不区分大小写,您可以在此jsfiddle中查看:http://jsfiddle.net/5RMhK/2/ - Sal
2
$(':text') 相当于 $('[type=text]') (http://api.jquery.com/text-selector/)。不像这样:http://jsfiddle.net/ZWfb6/。 - Eliasdx
@sally 第一个元素不匹配。http://jsfiddle.net/6VzNv/ - Smamatti
1
$(':text') 你是将其作为表单元素进行选择,这种情况下它将区分大小写,而使用 $('[type=text]') 我们是通过属性选择它的,这不区分大小写。 - Sal
@sally 很好,所以这就是他问题的答案 :-) - Smamatti
1
不要使用 :text。这不是标准的 CSS 选择器。请改用 $('input[type="text"]') - RightSaidFred
3个回答

4

编辑:尽管我做了研究,但一开始得出了完全错误的结论。答案已更新:O(感谢@ThiagoSantos一开始就给出了正确的答案:D)。

jQuery ":text" 文档 表示:

因为 :text 是 jQuery 的扩展而不是 CSS 规范的一部分,使用 :text 的查询无法利用本地 DOM querySelectorAll() 方法提供的性能提升。

如果您深入1.7.1版本的源代码,则似乎该选择器的实现方式如下:

text: function( elem ) {
    var attr = elem.getAttribute( "type" ), type = elem.type;
    // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
    // use getAttribute instead to test this case
    return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
}

对于<input type="tEXt" />attr的值为"tEXt",这与type不匹配。令我惊讶的是:

更新后的答案应为::text区分大小写


1
在您的示例中,elem.getAttribute(“type”)不会返回“tEXt”吗?这样的话它就是区分大小写的了。 - Tom Hubbard
抱歉,我现在已经更新了我的答案。Kudo's归功于那些一开始就有正确的jsfiddles的人们羞愧地躲起来 :D - Jeroen
结论被高估了。 ;0) 实际上,如果我正确地阅读以下链接,当DOM是HTML文档时,getAttribute应该小写。https://developer.mozilla.org/en/DOM/element.getAttribute - Tom Hubbard
1
它将getAttribute调用的_argument_转换为小写,而不是返回值,对吗? - Jeroen

3

看起来这些都是大小写敏感的..

$(':text') 等同于 $('[type=text]')

以下是一个示例,只有一个警报。

http://jsfiddle.net/huX3M/


2

首先,我要说,是的,它是大小写敏感的。请参见这个jsFiddle

鉴于应该和表现完全一致,我认为这可能是一个bug。

无论如何,最好使用[type="text"],因为它可以被querySelectorAll解析,并且因此具有显着的性能优势。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接