转义不适用于jQuery选择器的特殊字符

时间:2014-10-02 22:33:06

标签: javascript jquery css regex

我有带特殊字符的css classNames(特别是#和+)。我编写了一个函数来格式化jQuery选择器以使用双反斜杠转义这些特殊字符。我将格式化的字符串存储到变量中,然后将其连接起来以创建完整的类名。将它放入jQuery时,找不到该类。但是,如果我对类名的格式化版本进行硬编码,则可以正常工作。

问题是,这里出了什么问题以及如何使用这些特殊字符选择这些类名?

请参阅以下jsFiddle作为示例: http://jsfiddle.net/w8Lv9e1g/

// escape regex to be treated as string literal
function escapeRegExp(string){
    return string.replace(/([.*+?^${}()|\[\]\/\\])/g, "\\$1");
}
// format string to escape character in css
function escapeSpecialChar(string) {
    var specialChar = /[#\+]/g;
    if (specialChar.test(string)) {
        var matchList = string.match(specialChar);
    for (var i = 0; i < matchList.length; i++) {
        var re = new RegExp (escapeRegExp(matchList[i]), 'g');
        string = string.replace(re, escapeRegExp('\\') + matchList[i]);
        }
    }
    return string;
}
var product = 'test-#A1_11dsf14_OBC+SAM';
// this yields test-\\#A1_11dsf14_OBC\\+SAM 
var formatted = escapeSpecialChar(product);

// this doesn't work 
$('.test-' + formatted).text('testing');

// this does work (hard coded)
$('.test-\\#A1_11dsf14_OBC\\+SAM').text('hard coded');

1 个答案:

答案 0 :(得分:0)

更改

string = string.replace(re, escapeRegExp('\\') + matchList[i]);

string = string.replace(re, '\\' + matchList[i]);

$('.test-' + formatted).text('testing');

$('.' + formatted).text('testing');

编辑:检查斜视的评论,以便更简单地实现您的目标。 :)