将类名分配给元素时,请将方括号转义
有没有人知道如何在使用jQuery设置类名时避开方括号字符?
尝试以下操作:
$('#txtFirstname').addClass('test[someval]')
然后
$('#txtFirstname').attr('class')
你会看到课堂在那里。
现在尝试
$('#txtFirstname').hasClass('test[someval]')
失败
我能想到的唯一原因是方括号。
我需要这些用于我看到的jQueryvalidation。
任何build议感激
干杯邓肯
然后,他search了12个小时的答案,放弃了,并在SO上发布了一个问题,然后在2秒钟内find了答案。
我会把它放在这里为其他不幸的人。
用两(2)个反斜杠逃脱。
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网站的其他文档:
然而,在这里谷歌:不要害怕负分,这是迄今为止唯一正确的答案,我提供了足够的证据来支持它。 我猜混乱是因为原来的问题标题是误导性的,大多数人并没有真正阅读整个问题。
我很难重现问题中所描述的问题。 有了这个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.
因此不需要转义 。