jQuery - 在name属性中获取方括号的错误

时间:2013-05-31 14:51:40

标签: javascript jquery regex jquery-selectors

我知道在此问题上已有很多关于此问题的帖子。但它们都不适用于我的情况。

我有多个选择输入,使用以下命名格式:

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] 

所以,基本上它既不起作用。

任何人都可以帮我解决如何逃避方括号。

2 个答案:

答案 0 :(得分:4)

您的属性值应该包含在""中,无需转义[]

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

所以翻译的选择器应该是

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

更新
您需要选择<select>元素,然后您需要将元素选择器input更改为select,如$('#' + formId + ' select[name="' + key + '"]').addClass('inputBoxError');

答案 1 :(得分:1)

需要\转义特殊字符。哪个也需要转义,所以 - 这是一个处理你案件的例子:http://jsfiddle.net/tb2cW/1/

这是需要转义的字符列表:~!@$%^&*()_+-=,./\';:"?><[]{}|和`