为什么jQuery 3不能识别属性选择器中的'#'字符? [英] Why can't jQuery 3 identify the '#' character in an attribute selector?

查看:184
本文介绍了为什么jQuery 3不能识别属性选择器中的'#'字符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚尝试将我的应用程序切换到jQuery 3.我正在进行一些测试,一切都按预期工作,直到我来到我的一个应用程序,在选择器中使用了'#'符号。我有一块像这样的jQuery:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆