删除带有特殊字符的HTML元素

时间:2017-09-01 15:26:51

标签: javascript jquery

我想删除HTML DOM对象的ID,其中包含特殊字符(点,逗号等)。我试图使用这个代码来逃避这些字符,但是它没有工作(元素没有被删除):

        var file_html_id ="#"+ filename.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~]/g, "\\\\$&");
        console.log(file_html_id);
        $(file_html_id).remove();

其中filename是ID。值得一提的是,带有转义字符的字符串会按预期显示。如果我“硬编码”那个字符串它工作正常...所以问题可能在哪里?

1 个答案:

答案 0 :(得分:2)

您可以尝试其他几种方法,而不是试图逃避角色:

  1. 在id字符串上使用jQuery's escapeSelector()。这将转义字符串中的任何特殊字符。注意在jQuery的v3.0中添加了escapeSelector。查看他们如何进行转义here 如果有兴趣的话。

    $( '#'+ $.escapeSelector('theText') )
    
  2. 使用attribute selector而不是尝试转义ID选择器的所有可能字符

    $('[id="idHere"]')
    

    然而,如果由于某些奇怪的原因,您有多个具有相同ID的元素,则会选择多个元素。

  3. 演示

    &#13;
    &#13;
    var id = "some,weird®,id";
    var id2 = "some,other®,id";
    
    $('#'+ $.escapeSelector(id2)  ).css({border:'1px solid green'});
    
    $('[id="'+id+'"]').css({border:'1px solid red'});
    &#13;
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <div id="some,weird®,id"></div>
    <br/>
    <div id="some,other®,id"></div>
    &#13;
    &#13;
    &#13;