我有一个包含一系列选项的下拉列表:
<select id=SomeDropdown>
<option value="a'b]<p>">a'b]<p></option>
<option value="easy">easy</option>
<select>
请注意,选项value/text包含一些令人讨厌的东西:
我需要删除a'b]选项,但我在编写选择器时运气不佳。两者都不是:
$("#SomeDropdown >option[value='a''b]<p>']");
或
$("#SomeDropdown >option[value='a\'b]<p>']");
正在返回选项。
使用"value=“选择器时,转义值的正确方法是什么?
发布于 2009-04-11 14:18:45
我觉得你做不到。它应该是:
#SomeDropdown >option[value='a\'b]<p>']
这确实是一个CSS选择器(在现代浏览器中)。用JavaScript字符串文字表示,您自然需要另一轮转义:
$("#SomeDropdown >option[value='a\\'b]<p>']")
但这在jQuery中不起作用,因为它的选择器解析器并不完全符合标准。它使用这个正则表达式来解析[attr=value]
条件的value
部分:
(['"]*)(.*?)\3|)\s*\]
包含开始引号的组,奇怪的是,开始引号可以是多个开始引号,或者根本没有开始引号。.*?然后可以解析任何字符,包括引号,直到它命中第一个‘]’字符,结束匹配。没有提供反斜杠转义CSS特殊字符,因此不能在jQuery中匹配任意字符串值。
(正则表达式解析器再一次失败了。)
但好消息是您不必依赖jQuery选择器;您可以使用非常好的DOM方法,特别是HTMLSelectElement.options:
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费力地解析和实现选择器要快很多倍,而且您可以使用任何您喜欢的值字符串,而不必担心转义特殊字符。
发布于 2012-06-10 12:32:49
将.filter()
与自定义函数一起使用。txt
应该包含令人讨厌的字符串,或者您可以将indexOf
替换为您选择的任何其他函数。
$("#SomeDropdown option")
.filter(function(i){
return $(this).attr("value").indexOf(txt) != -1;
})
.remove();
发布于 2012-11-24 00:52:01
我发现您可以使用\\来转义选择器。可以把它想象成一个正则表达式和一个逃离正则表达式的函数。
示例:
$(this).find('input[name=user\\[1\\]\\[name\\]]').val();
https://stackoverflow.com/questions/739695
复制相似问题