3 回答

TA貢獻1775條經(jīng)驗 獲得超11個贊
我認為你不能。它應(yīng)該是:
#SomeDropdown >option[value='a\'b]<p>']
這確實可以作為CSS選擇器(在現(xiàn)代瀏覽器中)。用JavaScript字符串文字表示,你自然需要另一輪轉(zhuǎn)義:
$("#SomeDropdown >option[value='a\\'b]<p>']")
但是這在jQuery中不起作用,因為它的選擇器解析器并不完全符合標(biāo)準(zhǔn)。它使用此正則表達式來解析條件的value一部分[attr=value]:
(['"]*)(.*?)\3|)\s*\]
\ 3是包含開頭報價的組,奇怪的是允許多個開頭報價,或根本沒有開盤報價。。*?然后可以解析任何字符,包括引號,直到它擊中第一個']'字符,結(jié)束匹配。反斜杠轉(zhuǎn)義CSS特殊字符沒有規(guī)定,因此您無法在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費力地解析和實現(xiàn)你的選擇器要簡單快多倍,你可以使用你喜歡的任何值字符串,而不必擔(dān)心轉(zhuǎn)義特殊字符。

TA貢獻1772條經(jīng)驗 獲得超6個贊
我使用這個函數(shù)來轉(zhuǎn)義jquery選擇器。它基本上逃脫了一切可疑但可能過于激進。
函數(shù)escapeStr(str)
{
if(str)
return str.replace(/([#;?%&,。+ *?\':“!^ $ [\]()=> | \ / @])/ g,'\\ $ 1');
返回str;
}

TA貢獻1785條經(jīng)驗 獲得超4個贊
使用.filter()自定義功能。txt應(yīng)該包含你討厭的字符串,或者你可以indexOf用你選擇的任何其他函數(shù)替換。
$("#SomeDropdown option")
.filter(function(i){
return $(this).attr("value").indexOf(txt) != -1;
})
.remove();
添加回答
舉報