[Javascript] 为什么jQuery 3不能识别属性选择器中的“#”字符?


Answers

通过jQuery的文档 ,属性值:

可以是有效的标识符或带引号的字符串。

有效的标识符是任何有效的CSS标识符:

https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier

在CSS中,标识符(包括元素名称,类和选择器中的ID) 只能包含字符[a-zA-Z0-9]和ISO 10646 字符U + 00A0及更高版本,连字符( - )和下划线 _) ; 他们不能以数字,两个连字符或连字符后跟数字开头。 标识符也可以包含转义字符和任何ISO 10646字符作为数字代码(参见下一项)。 例如,标识符“B&W?” 可以写成“B \ W \”。 或“B \ 26 W \ 3F”。

既然你想使用# ,你需要转义或引用值:

                         //Note the quotes v --------- v
.find('.filterFeedItem[data-component-type="#somefilter"]');
Question

我只是试着将我的应用程序切换到jQuery 3.我正在经历一些测试,一切都按预期工作,直到我遇到了一个在选择器中使用'#'符号的应用程序。 我有一块看起来像这样的jQuery:

var $existingFilter = $container.find('.filterFeedItem[data-component-type=#somefilter]');

使用jQuery 3我得到一个错误:

jquery-3.0.0.js:1529 Uncaught Error: Syntax error, 
unrecognized expression: .filterFeedItem[data-component-type=#somefilter]

有谁知道为什么jQuery不能再解析包含这个符号的选择器?