在为元素指定类名时转义方括号

时间:2009-09-23 13:43:48

标签: jquery

在使用jQuery设置类名时,有没有人知道如何转义方括号?

尝试以下方法:

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

然后

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

你会看到课程在那里。

现在尝试

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

FAIL

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

我需要这些用于我看到的jQuery验证。

任何建议赞赏

干杯 邓肯

4 个答案:

答案 0 :(得分:81)

然后,他搜索了12个小时的答案,放弃并在SO上发布了一个问题,然后在2秒内找到答案。

我会把它放在这里给其他不那么幸运的人。

逃避两(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/

答案 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网站的一些额外文档:

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

答案 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.

因此不需要转义