为了账号安全,请及时绑定邮箱和手机立即绑定

jQuery选择器值转义

jQuery选择器值转义

达令说 2019-09-02 20:12:02
我有一个包含一系列选项的下拉列表:<select id=SomeDropdown>  <option value="a'b]&lt;p>">a'b]&lt;p></option>  <option value="easy">easy</option><select>请注意,选项值/文本包含一些讨厌的东西:单引号关闭方括号转载html我需要删除a'b] <p>选项,但我没有运气写选择器。无论是:$("#SomeDropdown >option[value='a''b]&lt;p>']");要么$("#SomeDropdown >option[value='a\'b]&lt;p>']");正在返回选项。使用“value =”选择器时,转义值的正确方法是什么?
查看完整描述

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费力地解析和实现你的选择器要简单快多倍,你可以使用你喜欢的任何值字符串,而不必担心转义特殊字符。


查看完整回答
反对 回复 2019-09-02
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

我使用这个函数来转义jquery选择器。它基本上逃脱了一切可疑但可能过于激进。


函数escapeStr(str) 

{

    if(str)

        return str.replace(/([#;?%&,。+ *〜\':“!^ $ [\]()=> | \ / @])/ g,'\\ $ 1');      


    返回str;

}


查看完整回答
反对 回复 2019-09-02
?
九州编程

TA贡献1785条经验 获得超4个赞

使用.filter()自定义功能。txt应该包含你讨厌的字符串,或者你可以indexOf用你选择的任何其他函数替换。


$("#SomeDropdown option")

   .filter(function(i){

       return $(this).attr("value").indexOf(txt) != -1;

   })

   .remove();


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 555 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信