我有带特殊字符的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');
答案 0 :(得分:0)
更改
string = string.replace(re, escapeRegExp('\\') + matchList[i]);
到
string = string.replace(re, '\\' + matchList[i]);
和
$('.test-' + formatted).text('testing');
到
$('.' + formatted).text('testing');
编辑:检查斜视的评论,以便更简单地实现您的目标。 :)