JQuery экранировать квадратные скобки, чтобы выбрать элемент - PullRequest
4 голосов
/ 06 декабря 2011

Рассмотрим элемент ввода

<input id="meta[152][value]" type="text" />

Здесь поле ввода генерируется динамически . Мне нужно выбрать это поле. Итак, я использовал,

alert($('#meta[152][value]').val());

Но это, похоже, неверно. После поиска я обнаружил, что «квадратные скобки» нужно экранировать, как #meta\\[152\\]\\[value\\]

Так как это сделать? В настоящее время я использую этот код,

var id = "#meta[152][value]" // (I get this value by another method) I need the escaping to be done here. So that i can use as

/ ** мне нужно, чтобы значение id было экранировано с помощью регулярных выражений, замены или любого другого метода чтобы получить #meta \ [152 \] \ [value \] а не вручную ** /

alert($(id).val());

Ваши предложения будут полезны!

Ответы [ 6 ]

6 голосов
/ 06 декабря 2011

Если вы чувствуете себя более комфортно, не сбегая, вы также используете селектор атрибутов и ищите элемент с таким идентификатором, например: $("[id='meta[152][value]']")

6 голосов
/ 06 декабря 2011

Должно работать следующее:

alert($('#meta\[152\]\[value\]').val());

или

var id = "#meta\[152\]\[value\]";
alert($(id).val());

Рабочий пример

Функция преобразования:

function ConvertValue(id)
{
    var test = id.replace(/[[]/g,'\\\\[');
    return "#" + test.replace(/]/g,'\\\\]'); 
}

Пример преобразования

3 голосов
/ 06 декабря 2011

Самый простой способ - просто использовать обычный getElementById, который не требует экранирования:

document.getElementById("meta[152][value]").value;
1 голос
/ 06 декабря 2011

это шоудл у тебя работает, почти у тебя это было:

    $(document).ready(function() {
       var id = "#meta\\[152\\]\\[value\\]";
        alert($(id).val()); 
    });
0 голосов
/ 05 ноября 2018

Вы можете использовать метод _.escapeRegExp из библиотеки Lodash.

console.log($('#' + _.escapeRegExp('meta[152][value]')).val());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
<input id="meta[152][value]" type="text" value='Test' />
0 голосов
/ 06 декабря 2011

Хм, просто поместите экранированное значение прямо в вашу строку.

var id = "#meta\\[152\\]\\[value\\]";

Посмотрите, как работает здесь

...