将类名分配给元素时,请将方括号转义

有没有人知道如何在使用jQuery设置类名时避开方括号字符?

尝试以下操作:

$('#txtFirstname').addClass('test[someval]') 

然后

 $('#txtFirstname').attr('class') 

你会看到课堂在那里。

现在尝试

 $('#txtFirstname').hasClass('test[someval]') 

失败

我能想到的唯一原因是方括号。

我需要这些用于我看到的jQueryvalidation。

任何build议感激

干杯邓肯

然后,他search了12个小时的答案,放弃了,并在SO上发布了一个问题,然后在2秒钟内find了答案。

我会把它放在这里为其他不幸的人。

用两(2)个反斜杠逃脱。

http://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/

jQuery API页面的介绍给出了上面的解释:

要使用任何元字符(如!“#$%&'()* +,。/ :; <=>?@ [] ^`{|}〜)作为名称的文字部分,必须用两个反斜杠逃脱:\\。

如果select器包含在一个variables中(或者如果你可以把它变成一个variables),下面的代码可能会有帮助:

 selector_name = $this.attr('class'); //eg selector_name = users[0][first:name] escaped_selector_name = selector_name.replace(/(:|\.|\[|\])/g,'\\$1'); //eg escaped_selector_name = users\\[0\\]\\[first\\:name\\] 

总之,我们用双反斜线前缀所有特殊字符。 以下是jQuery网站的其他文档:

http://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/

然而,在这里谷歌:不要害怕负分,这是迄今为止唯一正确的答案,我提供了足够的证据来支持它。 我猜混乱是因为原来的问题标题是误导性的,大多数人并没有真正阅读整个问题。


我很难重现问题中所描述的问题。 有了这个HTML:

 <div id="txtFirstname"></div> 

…我编写了最简单的testing用例:

 jQuery(function($){ $('#txtFirstname').addClass('test[someval]'); console.log( $('#txtFirstname').attr('class') ); console.log( $('#txtFirstname').hasClass('test[someval]') ); }); 

…并得到了预期的答案:

 "test[someval]" true 

这是一个使用jQuery / 1.8的在线演示 。 直到我尝试了一个较老的jQuery版本,我才能重现它。 所以,显然, 这是一个固定在jQuery / 1.4.0上的bug 。 我发现一张看似与此相关的票据 (尽pipe它被标记为1.4.2而不是1.4.0)。


虽然您当然需要使用\\引号或转义元字符来将其用作名称的文字部分,但该规则适用于select器 。 但是, .hasClass()方法不会接收select器作为参数,而是接收类名称:

 .hasClass( className ) className Type: String The class name to search for. 

因此不需要转义