Chcę usunąć obiekt HTML DOM za pomocą jego identyfikatorazawiera znaki specjalne (kropki, przecinki itp.). Próbowałem użyć tego kodu, który unika tych znaków, ale nie działa (element nie jest usuwany):
var file_html_id ="#"+ filename.replace(/[!"#$%&"()*+,./:;<=>?@[\]^`{|}~]/g, "\\$&");
console.log(file_html_id);
$(file_html_id).remove();
gdzie nazwa pliku to jego identyfikator. Warto wspomnieć, że ciąg znaków ze znakami ucieczki jest wyświetlany zgodnie z oczekiwaniami. A jeśli „zakoduję” ten ciąg znaków, to działa dobrze… Więc gdzie może być problem?
Odpowiedzi:
2 dla odpowiedzi № 1Zamiast próbować uciec od postaci, możesz spróbować na kilka innych sposobów:
Posługiwać się jQuery "s escapeSelector () na ciąg id. Pozwoli to uniknąć znaków specjalnych w ciągu. Uwaga
escapeSelector
został dodany w wersji 3.0 jQuery. Zobacz, jak sobie radzą tutaj Jeśli zainteresowany.$( "#"+ $.escapeSelector("theText") )
Użyj selektor atrybutu zamiast próbować uciec od wszystkich możliwych znaków dla selektora identyfikatora
$("[id="idHere"]")
To jednak wybierze wiele elementów, jeśli z jakiegoś dziwnego powodu masz wiele elementów o tym samym identyfikatorze.
Próbny
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>