Селектор jQuery для входів з квадратними дужками в атрибуті name


179

Я намагаюся вибрати цей елемент, у якого атрибут name має квадратні дужки:

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

Я спробував це (що не працює):

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

і це не робить:

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

або це:

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

EDIT: Як дехто з вас зазначав, $('input[inputName=someValue]')він ніколи не працював. Те , що я намагався зробити , це: $('input[name=inputName][value=someValue]'). (Але з []атрибутом імені).

Відповіді:


262

Відповідно до документації jQuery , спробуйте це:

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

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

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

32
Хороший улов. Причина необхідності двох зворотних косих рисів полягає в тому, що одна косою косою рисою інтерпретується як символ втечі рядка JavaScript, тому вам потрібно два, щоб вказати буквальний зворотний косий рисок, який надає символу втечі селектору ... ах, радості декількох рівнів символів втеча.
Петро

Дякую тобі за це. Це лише питання використання регулярних виразів. Це дуже корисно при надсиланні даних форми безпосередньо до масиву чи списку в межах улюбленого перегляду. Це також допомогло мені відповісти на питання про видалення об'єктів з кількома елементами первинного ключа. ;)
Луїс Фейяо Веронесі

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 (/ ([|]) / g, '\\\\ $ 1'); працював для мене трохи краще, тому що додає
врізану

@Fydo просто пам’ятайте, що вам також потрібно уникнути деяких інших персонажів, включаючи колони, періоди, а також
Ерік Кігаті

1

Просто розділіть його різними цитатами:

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

JQuery:

var value = $('input[name="myName[1][data]"]').val();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.