I have a dropdown list that contains a series of options:
<select id=SomeDropdown>
<option value="a'b]<p>">a'b]<p></option>
<option value="easy">easy</option>
<select>
Notice that the option value/text contains some nasty stuff:
- single quotes
- closing square bracket
- escaped html
I need to remove the a'b]<p> option but I'm having no luck writing the selector. Neither:
$("#SomeDropdown >option[value='a''b]<p>']");
or
$("#SomeDropdown >option[value='a\'b]<p>']");
are returning the option.
What is the correct way to escape values when using the "value=" selector?
use
.filter()
with a custom function.txt
should contain your nasty string, or you could just replaceindexOf
with any other function you choose.If you are trying to do the escaping programmatically, you only need one set of slashes. This won't work:
But this will:
And so will this:
You can use this javascript to build a correctly escaped selector:
Here's a JS Fiddle that shows some of the weird behavior:
http://jsfiddle.net/dH3cV/
I find that you can use \ \ to escape selectors. Think of it as one \ for the regex and one to escape from the regex.
Example:
jQuery's forum has a nice solution for this:
https://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/
This slightly modified version of what they suggest is also nullsafe.
Safely escaping CSS string is not easy and can't be done with simple regex.
You can use
CSS.escape()
.this is not supported by all browsers but a polyfill exist.
The problem is due to HTML entities; the "
<
" is seen by the browser as "<
".The same could be said for the example provided by bobince; please note that the following does not work with jQuery 1.32 on Win + FF3:
However, changing the entity to a literal will indeed find the desired value:
Of course, there is a problem here, as the value that you're specifying is not the exact value that you're looking for. This can also be corrected with the addition of a helper function:
All together now:
Any now, the input value that you're searching for exactly matches the value of the select element.
This can also be written using jQuery methods:
And then finally, as a plugin since they are so easy to make: