JQuery селектор для входных данных в квадратных скобках в атрибуте имени

180

Я пытаюсь выбрать этот элемент, который имеет квадратные скобки в атрибуте имени:

<input type="text" name="inputName[]" value="someValue">

Я пробовал это (что не работает):

$('input[inputName[]=someValue]')

и не делает этого:

$('input[inputName&#91;&#93;=someValue]')

или это:

$('input["inputName[]"=someValue]')

РЕДАКТИРОВАТЬ: Как некоторые из вас указали, $('input[inputName=someValue]')никогда не будет работать. То , что я пытался сделать , это: $('input[name=inputName][value=someValue]'). (Но с []в атрибуте имени).

Айдан
источник

Ответы:

263

В соответствии с документацией jQuery попробуйте это:

$('input[inputName\\[\\]=someValue]')

[EDIT] Однако я не уверен, что это правильный синтаксис для вашего селектора. Вы, вероятно, хотите:

$('input[name="inputName[]"][value="someValue"]')
Dancrumb
источник
32
Хороший улов. Причина необходимости использования двух обратных косых черт заключается в том, что один обратный слеш интерпретируется как escape-символ строки JavaScript, поэтому вам нужно два, чтобы указать буквальный обратный слеш, который обеспечивает escape-символ для селектора ... ах, радости нескольких уровней символа побега.
Питер
Спасибо вам за это. Это просто вопрос использования регулярных выражений. Это очень полезно при отправке данных формы непосредственно в массив или список в вашей любимой структуре представления. Это также помогло мне ответить на вопрос об удалении объектов с несколькими элементами первичного ключа. ;)
Luiz Feijão Veronesi
79

Вы можете использовать обратную косую черту для цитирования «забавных» символов в ваших селекторах jQuery:

$('#input\\[23\\]')

Для значений атрибутов вы можете использовать кавычки:

$('input[name="weirdName[23]"]')

Теперь я немного смущен вашим примером; как именно выглядит ваш HTML? Где, в частности, отображается строка «inputName»?

редактировать фиксированную болтовню; спасибо @Dancrumb

Заостренный
источник
1
Я не могу выбрать ( по совпадению отборное тег) , <select name="foo[bar]">используя , $('select[name=foo\\[bar\\]]')однако я нахожусь в состоянии сделать это , используя $('select[name="foo[bar]"]), вам второе предложение.
Фрэнк Ноке
53

Синтаксис селектора атрибута - это [name=value]где nameимя атрибута иvalue атрибута и значение атрибута.

Поэтому, если вы хотите выбрать все inputэлементы с атрибутом, nameимеющим значение inputName[]:

$('input[name="inputName[]"]')

И если вы хотите проверить два атрибута (здесь: nameи value):

$('input[name="inputName[]"][value=someValue]')
гумбо
источник
7

Если селектор содержится в переменной, может быть полезен приведенный ниже код:

selector_name = $this.attr('name');
//selector_name = users[0][first:name]

escaped_selector_name = selector_name.replace(/(:|\.|\[|\])/g,'\\$1');
//escaped_selector_name = users\\[0\\]\\[first\\:name\\]

В этом случае мы используем все специальные символы с двойной обратной косой чертой.

Эрик Кигати
источник
1
selector.replace (/ ([|]) / г, '\\\\ $ 1'); работал немного лучше для меня, потому что он добавляет экранированные косые черты и производит два, а не один экранирующий слеш ...
Fydo
@ Фидо, просто помни, что тебе также нужно избегать некоторых других персонажей, включая двоеточия и точки
Эрик Кигати,
1

Просто разделите его разными цитатами:

<input name="myName[1][data]" value="myValue">

JQuery:

var value = $('input[name="myName[1][data]"]').val();
slva2000
источник