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 關注
- 632 瀏覽
相關問題推薦
添加回答
舉報