jQuery - ошибка получения квадратных скобок в атрибуте имени

Я знаю, что в SO уже есть много сообщений по этой проблеме. Но ни один из них не подходит для моего случая.

У меня есть несколько входов select со следующим форматом именования:

select name="violationCategory[${theCount.count-1}].subCategory"

что переводится примерно так:

select name="violationCategory[0].subCategory"
select name="violationCategory[1].subCategory"
.. so on

Я должен применить определенный класс к этим выбранным входам, если выполняется какое-то условие. Итак, я пытаюсь заменить квадратные скобки на что-то вроде этого:

if(key.indexOf("[") >= 0){
        key = $.trim(key).replace("name=^[","name=^\\[");
        key = $.trim(key).replace("].","\\]."); 
        alert(key);
        $("#" + formId + " select[name=" + key + "]").addClass('inputBoxError');                            
    } 

Предупреждение печатает:

violationCategory[1\].subCategory]

и я получаю ошибку:

Uncaught Error: Syntax error, unrecognized expression: #referralViolationForm select[name=violationCategory[1\].subCategory] 

Когда я меняю код на:

key = $.trim(key).replace("].","\].");

тревожные отпечатки:

violationCategory[1].subCategory]

и я получаю ошибку:

Uncaught Error: Syntax error, unrecognized expression: #referralViolationForm select[name=violationCategory[1].subCategory] 

Так что, в основном, это не работает ни в какую сторону.

Может ли кто-нибудь помочь мне, как избежать квадратных скобок.


person tarares    schedule 31.05.2013    source источник


Ответы (2)


Значение вашего атрибута должно быть заключено в "", нет необходимости экранировать [ или ]

$('#' + formId + ' input[name="' + key + '"]').addClass('inputBoxError'); 

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

$('#myform input[name="violationCategory[1].subCategory"]').addClass('inputBoxError'); 

Обновление
Вам нужно выбрать элемент <select>, затем вам нужно изменить селектор элемента input на select, например $('#' + formId + ' select[name="' + key + '"]').addClass('inputBoxError');

person Arun P Johny    schedule 31.05.2013
comment
+1, хотя, но я думаю, что OP говорит о выбранных входах, так что select[name="violationCategory[1].subCategory"]' ?? - person PSL; 31.05.2013
comment
Спасибо за отзыв. У меня сработало изменение положения одинарных кавычек: $(# + formId + select[name=' + key + ']).addClass('inputBoxError'); - person tarares; 31.05.2013
comment
(очень сожалею о двойном откате - ошибочно подумал, что кто-то другой повозился с вашим сообщением) - person Chris Stratton; 31.05.2013

Специальные символы необходимо экранировать с помощью \. Это также необходимо экранировать, поэтому вот пример для вашего случая: http://jsfiddle.net/tb2cW/1/

А вот список символов, которые нужно экранировать: ~!@$%^&*()_+-=,./\';:"?><[]{}| и `

person eithed    schedule 31.05.2013