在使用jQuery设置类名时,有没有人知道如何转义方括号?
尝试以下方法:
$('#txtFirstname').addClass('test[someval]')
然后
$('#txtFirstname').attr('class')
你会看到课程在那里。
现在尝试
$('#txtFirstname').hasClass('test[someval]')
FAIL
我能想到的唯一原因是方括号。
我需要这些用于我看到的jQuery验证。
任何建议赞赏
干杯 邓肯
答案 0 :(得分:81)
然后,他搜索了12个小时的答案,放弃并在SO上发布了一个问题,然后在2秒内找到答案。
我会把它放在这里给其他不那么幸运的人。
逃避两(2)个反斜杠。
答案 1 :(得分:9)
jQuery API page的介绍给出了上述解释:
使用任何元字符(例如 !“#$%&'()* +,。/:;< =>?@ [] ^`{|}〜)作为名称的字面部分,必须 用两个反斜杠转义:\\。
答案 2 :(得分:4)
如果选择器包含在变量中(或者如果你可以将它变成变量),下面的代码可能会有所帮助:
selector_name = $this.attr('class');
//e.g selector_name = users[0][first:name]
escaped_selector_name = selector_name.replace(/(:|\.|\[|\])/g,'\\$1');
//e.g escaped_selector_name = users\\[0\\]\\[first\\:name\\]
简而言之,我们使用双反斜杠为所有特殊字符添加前缀。这里是jQuery网站的一些额外文档:
答案 3 :(得分:0)
但是这里谷歌: 不要被负面评分吓到,这是迄今为止唯一正确的答案,我提供的足够支持它的证据。我想混淆是因为最初的问题标题具有误导性,大多数人并没有真正阅读整个问题。
我很难重现问题中描述的问题。使用此HTML:
<div id="txtFirstname"></div>
...我编写了最简单的测试用例:
jQuery(function($){
$('#txtFirstname').addClass('test[someval]');
console.log( $('#txtFirstname').attr('class') );
console.log( $('#txtFirstname').hasClass('test[someval]') );
});
......得到了预期的答案:
"test[someval]"
true
这是一个online demo with jQuery/1.8。在我尝试older jQuery release之前,我无法重现它。所以,显然,这是一个在jQuery / 1.4.0上修复的错误。我发现a ticket似乎与此有关(虽然它被标记为固定在1.4.2而不是1.4.0)。
虽然您确实需要使用\\
引用或转义元字符,以便将它们用作名称的文字部分,但该规则适用于selectors。但是,.hasClass()方法不接收选择器作为参数,而是作为类名:
.hasClass( className ) className Type: String The class name to search for.
因此不需要转义。