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

Знам, че вече има много публикации в SO по този въпрос. Но никой от тях не работи за моя случай.

Имам няколко избрани входа със следния формат за именуване:

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