Javascript 需要转义jQuery选择器字符串中的特殊字符

Javascript 需要转义jQuery选择器字符串中的特殊字符,javascript,jquery,Javascript,Jquery,根据,您必须用双反斜杠转义[,等\\[ 我有一个这样创建的选择器(在本例中,假设val属性是something[4][2]) 我可以写一个正则表达式来逃避括号吗?看看这个 var val = $(this).attr('val').replace(/(\[|\])/g, '\\\\$1'); // something\\[4\\]\\[2\\] 当然,这只处理方括号,而不是任何其他特殊字符。但是,根据我的经验,方括号是我唯一使用的字符(因为PHP可以方便地处理输入名称属性,如:somethin

根据,您必须用双反斜杠转义
[
,等
\\[

我有一个这样创建的选择器(在本例中,假设
val
属性是
something[4][2]

我可以写一个正则表达式来逃避括号吗?

看看这个

var val = $(this).attr('val').replace(/(\[|\])/g, '\\\\$1'); // something\\[4\\]\\[2\\]

当然,这只处理方括号,而不是任何其他特殊字符。但是,根据我的经验,方括号是我唯一使用的字符(因为PHP可以方便地处理输入名称属性,如:
something[]

如果您想要任何类型的值,请尝试以下方法:

var val = $(this).attr('val').replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, "\\\\$&")
var val=$(this.attr('val').replace(/[!”,.\/:;?@[\\]^`{124;}~]/g,“\\\$&”)
这是通过使用两个反斜杠转义上列出的所有CSS元字符来实现的


请记住,在您的情况下,不需要这样做。您可以使用该函数选择具有给定值的所有选项元素,而无需转义该值,如Mathias Bynens的回答中所述。

CSS字符转义序列(如选择器中使用的)是非常复杂的。我甚至做过这样的操作

只需选择所有
选项
元素,然后根据它们的
属性值对它们进行
过滤
就更简单、更有效了:

var value = this.value;
$select.find('option').filter(function() {
  return this.value == value;
}).show();

这样,根本不需要特殊转义。

在选择器中的属性值周围加引号,然后只需转义值中的反斜杠和引号:

var val = $(this).attr('val');

val = val.replace(/\\/g, "\\\\").replace(/"/g, '\\"');

$select.find('option[value="' +  val + '"]').show();
如果您知道该值没有任何反斜杠或引号(如示例中所示),则不需要转义该值中的任何内容,只需要选择器中的引号。

有一个很好的解决方案,可以转义jQuery所需的所有字符

我喜欢他们建议的这种零安全版本:

function jqid (id) {
  return (!id) ? null : '#' + id.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
}

如果选择器以特殊字符结尾,则不能使用双反斜杠将其转义。下面的工作是使用正则表达式:例如,如果选择器id为“bonus+”,则可以使用:

$("div[id$='bonus+']")
当你有动态选择器时,它更有意义。

回答得晚,但是

jquery3 在
选项[value=“”+val+“]”中添加缺少的

var val=“something[4][2]”;
$(“选择”).find('option[value=“”+val+“]”).show();
选项{
显示:无;
}

4,2
1,1

FYI,你的表达式丢失了@我可以发誓,我写这篇文章时在选择器页面上没有看到
@
,但我找不到他们在文档存储库中添加它的确切时间。无论如何,我即将修复它。在我的情况下不起作用(返回“未捕获错误:语法错误,无法识别的表达式:测试\\\35;”)如果我尝试启动$(myString),我会有这样一种奇怪的行为:
>cs<“\XMTM2NDQwNTI5Mg\\=\=”=$7>$(cs)$(“\XMTM2NDQwNTI5Mg\\\\=\\\=”
,然后我使用以下代码将变量更改为一个转义:
replace([!”/“%&=”,\ \ \ \ \ \//。[\\\\\ \ \ \ \ \ \ \ \ \/。]~]/g,“\\$&”)`,使用变量作为选择器有效。替换字符串“\\\$&”不适用于jQuery 1.10。在这种情况下,它应该是“\\$&”。为什么不使用jQuery escapeSelector()方法?
$("div[id$='bonus+']")