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 № 1Em vez de tentar escapar dos personagens, você pode tentar outras maneiras:
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") )
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>