/ / Removendo elementos HTML com caracteres especiais - javascript, jquery

Removendo elementos HTML com caracteres especiais - javascript, jquery

Eu quero remover o objeto HTML DOM pelo seu ID, quecontém caracteres especiais (pontos, vírgulas etc.). Eu tentei usar esse código que escapa esses caracteres, mas não está funcionando (o elemento não está sendo removido):

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

onde nome do arquivo é o ID. Vale mencionar que a string com caracteres de escape é exibida conforme o esperado. E se eu "codificar" essa string, ela funciona bem ... Então, onde está o problema?

Respostas:

2 para resposta № 1

Em vez de tentar escapar dos personagens, você pode tentar outras maneiras:

  1. Usar escapeSelector () do jQuery na cadeia de identificação. Isso escapará a qualquer caractere especial na string. Nota escapeSelector foi adicionado na v3.0 do jQuery. Veja como eles estão fugindo Aqui se estiver interessado.

    $( "#"+ $.escapeSelector("theText") )
    
  2. Use um seletor de atributos em vez de tentar escapar de todos os caracteres possíveis para um seletor de identificação

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

    No entanto, isso selecionará vários elementos se, por alguma razão bizarra, você tiver vários elementos com o mesmo id.

Demonstração

var id = "some,weird®,id";
var id2 = "some,other®,id";

$("#"+ $.escapeSelector(id2)  ).css({border:"1px solid green"});

$("[id=""+id+""]").css({border:"1px solid red"});
<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>