根据选择器文档,您必须[
使用双反斜杠等进行转义\\[
。
我有一个像这样创建的选择器(假设val
属性something[4][2]
在这个例子中)。
var val = $(this).attr('val');
$select.find('option[value=' + val + ']').show();
我可以写一个正则表达式来为我转义括号吗?
根据选择器文档,您必须[
使用双反斜杠等进行转义\\[
。
我有一个像这样创建的选择器(假设val
属性something[4][2]
在这个例子中)。
var val = $(this).attr('val');
$select.find('option[value=' + val + ']').show();
我可以写一个正则表达式来为我转义括号吗?
如果你想要一些具有任何value的东西,试试这个:
var val = $(this).attr('val').replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, "\\\\$&")
这是通过使用两个反斜杠转义jQuery 文档的Selectors 页面上列出的所有 CSS 元字符来实现的。
请记住,在您的情况下,没有必要做这样棘手的事情。您可以使用filter函数选择具有给定值的所有选项元素,而不必转义该值,如 Mathias Bynens 的回答中所述。
CSS 字符转义序列(在选择器中使用)很棘手。它们非常棘手,我什至制作了一个网络应用程序,可以告诉您如何转义 CSS 中的任何字符。
简单地选择所有元素,然后根据它们的属性值选择它们要简单得多,效率也更高:option
filter
value
var value = this.value;
$select.find('option').filter(function() {
return this.value == value;
}).show();
这样,根本不需要特殊的转义。
迟到了,但是,
添加缺失""
的'option[value="'+ val +'"]'
var val = "something[4][2]";
$("select").find('option[value="' + val + '"]').show();
option{
display: none;
}
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<select>
<option value="something[4][2]">4,2</option>
<option value="something[1][1]">1,1</option>
</select>
jQuery.escapeSelector()
没有包装引号 - 所以使用你原来的选择器 'option[value='+ val +']'
var val = "something[4][2]";
var eSel = $.escapeSelector( val ); // something\[4\]\[2\]
$("select").find('option[value='+ eSel +']').show();
option{
display: none;
}
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<select>
<option value="something[4][2]">4,2</option>
<option value="something[1][1]">1,1</option>
</select>
看一下这个...
var val = $(this).attr('val').replace(/(\[|\])/g, '\\\\$1'); // something\\[4\\]\\[2\\]
当然,这只处理括号,而不处理任何其他特殊字符。然而,在我的经验中,括号中是唯一我使用(因为PHP的处理输入名称的属性这样的简便方法:something[]
)
在选择器中的属性值周围加上引号,然后你只需要在值中转义反斜杠和引号:
var val = $(this).attr('val');
val = val.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
$select.find('option[value="' + val + '"]').show();
如果您知道该值没有任何反斜杠或引号(如您的示例中所示),那么您不需要对值中的任何内容进行转义,您只需要选择器中的引号。