为什么jQuery 3无法识别'#'属性选择器中的字符?

时间:2016-07-16 21:48:40

标签: javascript jquery html dom jquery-selectors

我只是尝试将我的应用程序切换到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不能解析包含此符号的选择器?

2 个答案:

答案 0 :(得分:7)

请注意,更改显然发生在2.0版本,因为版本2.1.3使用选择器返回元素

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

jsfiddle https://jsfiddle.net/f8nej922/2/

虽然未能在jQuery 2.2 and 1.12 Released文档中找到对更改的具体引用或描述。

@BoltClock为noted,更改与Selector: Remove "#" exception for identifier tokens相关。

您可以使用# esacape \\字符;属性选择器的引用值;或使用$.escapeSelector()

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

jsfiddle https://jsfiddle.net/f8nej922/4/

答案 1 :(得分:3)

jQuery's documentation,属性值:

  

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

有效标识符是任何有效的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"]');