需要在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器时,它更有意义。