Необходимо избежать двух двоеточий в селекторе jquery

#javascript #jquery #dom

#javascript #jquery #dom

Вопрос:

Мне нужно выбрать HTML-элемент с помощью jQuery, а селектор, который я использую, имеет два двоеточия. Я пытаюсь избежать этих двоеточий.

 <div value="some::value_test"></div>

function escapeColon(selector) {
   return selector.replace(/::/, '\\:\\:');
}
var stringToEscape = "some::value_test";
var selector = $("[value|='"   escapeColon(stringToEscape)   "']");
  

Мой приведенный выше код по какой-то причине не работает. Я могу заставить его работать нормально, когда в селекторе есть один ‘:’, но не когда их два.

Комментарии:

1. api.jquery.com/jQuery.escapeSelector

2.«Я могу заставить его работать с 1» — как вы это сделали? сделайте то же самое. Работает только с .replace(/:/g, ":") jsfiddle.net/w3mearun/1

Ответ №1:

В jQuery есть встроенный метод. escapeSelector

 var stringToEscape = "some::value";

var elem = $("[value|='"   $.escapeSelector(stringToEscape)   "']");
console.log(elem.attr("value"));

stringToEscape = "some::value_test";
elem = $("[value|='"   $.escapeSelector(stringToEscape)   "']");
console.log(elem.attr("value"));  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div value="some::value"></div>
<div value="some::value_test"></div>  

С вашим кодом вы экранируете слишком много раз.

 function escapeColon(selector) {
   return selector.replace(/:/g, '\:');
}
var stringToEscape = "some::value";
var elem = $("[value|='"   escapeColon(stringToEscape)   "']");

console.log(elem);  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div value="some::value"></div>  

Комментарии:

1. Спасибо за ответ. Я думаю, проблема в том, что в моем селекторе также есть подчеркивание. На самом деле это var stringToEscape = «some::value_test»

2. Только что понял это

3. И вы пробовали это $.escapeSelector решение с вашим обновленным селектором?

4. _ не является специальным символом, так что это ничего не нарушит. Поэтому говорить, что это причина, неверно. Я предполагаю, что что-то еще не так, но поскольку это не реальный код, невозможно узнать, что.