为什么jQuery 3不能识别属性选择器中的'#'字符? [英] Why can't jQuery 3 identify the '#' character in an attribute selector?
问题描述
var $ existingFilter = $ container.find('。filterFeedItem [data-组分型=#somefilter]');
使用jQuery 3我收到一个错误:
jquery-3.0.0.js:1529未捕获错误:语法错误,
无法识别的表达式:.filterFeedItem [data-component-type =#somefilter]
有谁知道为什么jQuery不能再解析包含此符号的选择器?
注意,更改显然是在版本2.0发生,因为版本2.1.3返回元素使用选择器
var $ existingFilter1 = $ container.find('。filterFeedItem [data-component-type =#somefilter]');
jsfiddle https://jsfiddle.net/f8nej922/2/
尽管未能找到具体的参考或描述的变化在 jQuery 2.2和1.12发布文档。
As ,更改与选择器:删除标识符令牌的#异常。
您可以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/
I just tried switching my application to jQuery 3. I was going through some testing and everything was working as expected, until I came to a piece of my application that used a '#' symbol in a selector. I have a piece of jQuery that looks like this:
var $existingFilter = $container.find('.filterFeedItem[data-component-type=#somefilter]');
Using jQuery 3 I get an error:
jquery-3.0.0.js:1529 Uncaught Error: Syntax error,
unrecognized expression: .filterFeedItem[data-component-type=#somefilter]
Does anyone know why jQuery can no longer parse selectors containing this symbol?
Note, the change apparently took place at version 2.0, as version 2.1.3 returned element using selector
var $existingFilter1 = $container.find('.filterFeedItem[data-component-type=#somefilter]');
jsfiddle https://jsfiddle.net/f8nej922/2/
Though have not been able to locate specific reference to or description of change at jQuery 2.2 and 1.12 Released documentation.
As noted by @BoltClock, change is related to Selector: Remove "#" exception for identifier tokens.
You can esacape #
character with \\
; quote value at attribute selector; or use $.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/
这篇关于为什么jQuery 3不能识别属性选择器中的'#'字符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!