需要在jQueryselect器string中转义特殊字符

根据select器文档 ,你必须逃避[双反斜杠等\\[

我有一个select器是这样创build的(假设val属性在本例中是something[4][2] )。

 var val = $(this).attr('val'); $select.find('option[value=' + val + ']').show(); 

我可以写一个正则expression式来replace掉括号吗?

如果你想要的东西与任何价值的作品,试试这个:

 var val = $(this).attr('val').replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, "\\\\$&") 

这是通过使用两个反斜杠来转义jQuery文档的Selectors页面上列出的所有CSS元字符。

请记住,在你的情况下,没有必要这样做一些棘手的事情。 您可以使用filter函数来select具有给定值的所有选项元素,而不必转义该值,如Mathias Bynens的答案中所述。

CSS字符转义序列(在select器中使用)是棘手的 。 他们是如此棘手,我甚至做了一个Web应用程序,可以告诉你如何逃避CSS中的任何字符 。

简单地select所有的option元素,然后根据它们的value属性值对它们进行filter就简单多了:

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

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

看一下这个…

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

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

jQuery的FAQ有一个很好的解决scheme,可以逃避jQuery所需要的所有angular色。

我喜欢这个他们build议的nullsafe版本:

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

在select器中的属性值周围加上引号,那么你只需要在值中转义反斜杠和引号:

 var val = $(this).attr('val'); val = val.replace(/\\/g, "\\\\").replace(/"/g, '\\"'); $select.find('option[value="' + val + '"]').show(); 

如果你知道这个值没有任何反斜线或引号(就像你的例子),那么你不需要在值中转义任何东西,你只需要select器中的引号。

迟到了,但是,

jQuery 3

并在'option[value="'+ val +'"]'添加缺less的""

 var val = "something[4][2]"; $("select").find('option[value="' + val + '"]').show(); 
 option{ display: none; } 
 <script src="jquery-3.1.0.js"></script> <select> <option value="something[4][2]">4,2</option> <option value="something[1][1]">1,1</option> </select> 

如果select符以特殊字符结束,则不能使用双反斜杠进行转义。 工作arround是使用正则expression式:例如,如果select器ID是“奖金+”,那么你可以使用:

 $("div[id$='bonus+']") 

当你拥有dynamicselect器时,它更有意义。