3 回答
TA贡献1775条经验 获得超11个赞
我认为你不能。它应该是:
#SomeDropdown >option[value='a\'b]<p>']
这确实可以作为CSS选择器(在现代浏览器中)。用JavaScript字符串文字表示,你自然需要另一轮转义:
$("#SomeDropdown >option[value='a\\'b]<p>']")
但是这在jQuery中不起作用,因为它的选择器解析器并不完全符合标准。它使用此正则表达式来解析条件的value一部分[attr=value]:
(['"]*)(.*?)\3|)\s*\]
\ 3是包含开头报价的组,奇怪的是允许多个开头报价,或根本没有开盘报价。。*?然后可以解析任何字符,包括引号,直到它击中第一个']'字符,结束匹配。反斜杠转义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费力地解析和实现你的选择器要简单快多倍,你可以使用你喜欢的任何值字符串,而不必担心转义特殊字符。
TA贡献1772条经验 获得超6个赞
我使用这个函数来转义jquery选择器。它基本上逃脱了一切可疑但可能过于激进。
函数escapeStr(str)
{
if(str)
return str.replace(/([#;?%&,。+ *〜\':“!^ $ [\]()=> | \ / @])/ g,'\\ $ 1');
返回str;
}
TA贡献1785条经验 获得超4个赞
使用.filter()自定义功能。txt应该包含你讨厌的字符串,或者你可以indexOf用你选择的任何其他函数替换。
$("#SomeDropdown option")
.filter(function(i){
return $(this).attr("value").indexOf(txt) != -1;
})
.remove();
- 3 回答
- 0 关注
- 585 浏览
相关问题推荐
添加回答
举报