我正在使用jQuery选择器检查href中的字符:
var param = "something";
$("a[href*="+param+"]").css("color", "red");
这可以正常工作,直到“某事物”包含=符号。例如:
var param = "xkey=123";
$("a[href*="+param+"]").css("color", "red");
然后我没有结果。有人知道解决方案吗?
答案 0 :(得分:6)
您需要转义=
字符,因为它在jQuery selector中使用时具有特殊含义。以下是需要转义的所有字符的完整列表:
#;&,.+*~':"!^$[]()=>|/
因此,您可以使用以下内容来转义param
:
param.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1')
来自jQuery documentation:
如果您想使用任何元字符(例如 !“#$%&'()* +,。/:;< =>?@ [] ^`{|}〜)作为名称的字面部分,你必须 用两个反斜杠转义字符:\。
这是 DEMO 。
答案 1 :(得分:3)
引用参数:
$("a[href*='"+param+"']")
如果这还不够(param
可能包含撇号),那么就逃避它们:
$("a[href*='"+param.replace(/'/g,"\\'")+"']")
答案 2 :(得分:2)
您需要使用=
转义\\=
。
param = param.replace(/=/g, '\\\\=');
但是你还需要在jQuery选择器中转义其他特殊字符。
function escape(param) {
return param.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\\\$1');
}
您也可以使用.filter
方法。
$('a').filter(function() {
return $(this).attr('href').indexOf(param) !== -1;
})
答案 3 :(得分:0)
这种行为就是这样,最后它会转化为模棱两可的选择器,即$("a[href*=xkey=123]")
确实无效。
使用\\
infront转义等号并使用引号
var param = "xkey\\=123";
$("a[href*='"+param+"']").css("color", "red");
答案 4 :(得分:0)
您可以这样验证:
希望它适合原因:)
foo - 是字符串;
if (! /^[a-zA-Z0-9]+$/.test(foo)) {
// Validation failed
}
或
像这张支票一样逃脱:
if(your_string.indexOf('=') != -1){
alert("equal found.");
}
然后将=
替换为\\=