#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.
_
не является специальным символом, так что это ничего не нарушит. Поэтому говорить, что это причина, неверно. Я предполагаю, что что-то еще не так, но поскольку это не реальный код, невозможно узнать, что.