转义jquery选择器中的特殊字符

时间:2016-12-27 11:33:56

标签: javascript jquery

我可以使用id='#ul_[]ER$%#'控制但是当我使用以下正则表达式语法来转义控件ID中的特殊字符时,它会返回以下字符串#ul_\[\]\E\R\$\%\#, 它也逃脱了字母表。我怎样才能使用jQuery转义字符串中的特殊字符。为了逃避我在正则表达式后面使用的特殊字符:

$("#ul_"+data.replace(/([#;&,.+-_=?{}*~\':%"!^$[\]()=>|\/])/g,"\\$1"))

2 个答案:

答案 0 :(得分:0)

有两个问题:

  1. 正则表达式类(-)中的[...]不会被视为文字连字符,而是划分从+_的范围,包括大写字母数字字符。所以要么逃避连字符,要么把它放在课程的最后;

  2. id属性的选择器应以#开头。虽然您的id属性值以散列(#)开头,但您需要另一个属性值,并且您需要转义属于id值的属性。

  3. 所以这会奏效:

    var data = '[]ER$%#';
    
    var sel = '#' + ("#ul_"+data).replace(/([#;&,.+\-_=?{}*~\':%"!^$[\]()=>|\/])/g,"\\$1");
    
    console.log($(sel).text());
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id='#ul_[]ER$%#'>test</div>

    更多评论:

    • 您可以从要删除的字符列表中删除-_。它们在jQuery选择器中没有特殊含义。
    • 另一方面,空格`(后退勾号),@< 进行转义。请参阅jQuery documentation
    • 中的字符列表
      

    要使用任何元字符(例如!"#$%&'()*+,./:;<=>?@[\]^`{|}~)作为名称的文字部分,必须将其转义

答案 1 :(得分:0)

此处介绍的功能可能对您有用:

https://totaldev.com/escaping-characters-to-get-a-valid-jquery-id/

function jqSelector(str) {
    return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
}

然后像这样使用它:

$('#'+jqSelector('id.with,special#characters')).text('My Selected Element');