2010-03-02 3 views
149

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

<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]'). (Но с [] в атрибуте name).

+4

@Maerlyn, да, хотя я задал этот вопрос почти за год до другого вопроса, который вы упомянули. – aidan

ответ

215

согласно jQuery documentation, попробуйте следующее:

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

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

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

Хороший улов. Причина необходимости использования двух обратных косых черт связана с тем, что одна обратная косая черта интерпретируется как escape-символ строки JavaScript, поэтому вам нужно два, чтобы указать литеральный обратный слэш, который обеспечивает escape-символ для селектора ... ах, радости нескольких уровней символов побега. – Peter

+0

Это безумие, если ответить на вопрос Гумбо ниже. Двойное ускорение .. Нет, спасибо! –

+0

СПАСИБО ВАС !! Именно то, что мне нужно. –

47

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

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

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

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

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

Это гораздо приятнее, чем все, что происходит с помощью люфта, и я могу подтвердить, что он работает на Chrome 9 и IE6. Версия JQuery здесь 1.4.4 – pablobm

+0

Благодарим за добавление этого ответа!Использование кавычек является более практичным, чем выходное решение при динамическом построении селекторов. – octern

+0

Работает для меня в 1.8.3, хорошо. –

70

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

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

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

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

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

Редактировать fixed bogosity; благодаря @Dancrumb

+3

Документация jQuery предусматривает, что для ускорения требуется две обратные косые черты. – Dancrumb

+2

oh durr вы правы - это не столько для jQuery, а потому, что Javascript будет разбирать одиночные! Благодарю. – Pointy

+0

проголосовало после редактирования – Dancrumb

4

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

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\\] 

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

+1

selector.replace (/ (\ [| \])/g, '\\\\ $ 1'); работал немного лучше для меня, потому что он добавляет сбежавшие косые черты и производит два, а не один слэш ... – Fydo

+1

Это просто ПОЛНОСТЬЮ подключило меня! Спасибо!! –

+0

@Fydo просто помните, что вам также нужно избегать некоторых других персонажей, включая двоеточие, периоды, а также –

Смежные вопросы