Не думаю, что ты можешь. Это должно быть:
#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 кропотливого анализа и реализации вашего селектора, и вы можете использовать любую строку значений, которую вам нравятся, не беспокоясь о экранировании специальных символов.