首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery选择器值转义

jQuery选择器值转义
EN

Stack Overflow用户
提问于 2009-04-11 07:40:44
回答 8查看 54.6K关注 0票数 56

我有一个包含一系列选项的下拉列表:

代码语言:javascript
复制
<select id=SomeDropdown>
  <option value="a'b]&lt;p>">a'b]&lt;p></option>
  <option value="easy">easy</option>
<select>

请注意,选项value/text包含一些令人讨厌的东西:

  • 闭合正方形html

我需要删除a'b]选项,但我在编写选择器时运气不佳。两者都不是:

代码语言:javascript
复制
$("#SomeDropdown >option[value='a''b]&lt;p>']");

代码语言:javascript
复制
$("#SomeDropdown >option[value='a\'b]&lt;p>']");

正在返回选项。

使用"value=“选择器时,转义值的正确方法是什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-04-11 14:18:45

我觉得你做不到。它应该是:

代码语言:javascript
复制
#SomeDropdown >option[value='a\'b]<p>']

这确实是一个CSS选择器(在现代浏览器中)。用JavaScript字符串文字表示,您自然需要另一轮转义:

代码语言:javascript
复制
$("#SomeDropdown >option[value='a\\'b]<p>']")

但这在jQuery中不起作用,因为它的选择器解析器并不完全符合标准。它使用这个正则表达式来解析[attr=value]条件的value部分:

代码语言:javascript
复制
(['"]*)(.*?)\3|)\s*\]

包含开始引号的组,奇怪的是,开始引号可以是多个开始引号,或者根本没有开始引号。.*?然后可以解析任何字符,包括引号,直到它命中第一个‘]’字符,结束匹配。没有提供反斜杠转义CSS特殊字符,因此不能在jQuery中匹配任意字符串值。

(正则表达式解析器再一次失败了。)

但好消息是您不必依赖jQuery选择器;您可以使用非常好的DOM方法,特别是HTMLSelectElement.options:

代码语言:javascript
复制
var select= document.getElementById('SomeDropdown');
for (var i= select.options.length; i-->0;) {
    if (select.options[i].value=="a'b]<p>") {
        // do something with option
}   }

这比让jQuery费力地解析和实现选择器要快很多倍,而且您可以使用任何您喜欢的值字符串,而不必担心转义特殊字符。

票数 38
EN

Stack Overflow用户

发布于 2012-06-10 12:32:49

.filter()与自定义函数一起使用。txt应该包含令人讨厌的字符串,或者您可以将indexOf替换为您选择的任何其他函数。

代码语言:javascript
复制
$("#SomeDropdown option")
   .filter(function(i){
       return $(this).attr("value").indexOf(txt) != -1;
   })
   .remove();
票数 10
EN

Stack Overflow用户

发布于 2012-11-24 00:52:01

我发现您可以使用\\来转义选择器。可以把它想象成一个正则表达式和一个逃离正则表达式的函数。

示例:

代码语言:javascript
复制
$(this).find('input[name=user\\[1\\]\\[name\\]]').val();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/739695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档