我使用jQuery选择在HREF检查字符:jQuery选择包含等号
var param = "something";
$("a[href*="+param+"]").css("color", "red");
这工作得很好,直到“东西”包含一个等号(=)。例如:
var param = "xkey=123";
$("a[href*="+param+"]").css("color", "red");
然后我得不到结果。任何人都知道解决方案
我使用jQuery选择在HREF检查字符:jQuery选择包含等号
var param = "something";
$("a[href*="+param+"]").css("color", "red");
这工作得很好,直到“东西”包含一个等号(=)。例如:
var param = "xkey=123";
$("a[href*="+param+"]").css("color", "red");
然后我得不到结果。任何人都知道解决方案
您需要转义=
字符,因为它在用于jQuery selector时具有特殊含义。下面是需要转义所有字符的完整列表:
#;&,.+*~':"!^$[]()=>|/
因此,你可以使用以下方法来逃避param
:
param.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1')
从jQuery documentation:
如果您希望使用任何元字符(如 !“#$%&'()* +,。/:; < =>?@ [] ^`{|}〜)作为字面部分一个名字,你必须用两个反斜杠 转义字符:\。
这是DEMO。
报价参数:
$("a[href*='"+param+"']")
如果这还不够(param
可能包含引号),然后逃逸他们:
$("a[href*='"+param.replace(/'/g,"\\'")+"']")
+1,我怀疑是最简单的解决方案,可以处理任何参数。 –
非常好 - 正是我需要的。谢谢 –
它表现这样监守,在年底将翻译以模棱两可的选择器即$("a[href*=xkey=123]")
这确实是无效的。
逃生等号\\
盈与报价包住参数部分
var param = "xkey\\=123";
$("a[href*='"+param+"']").css("color", "red");
在这种简单的情况下,应该有一个或另一个(引用参数或转义'=')。 –
是的,没有必要为所有的符号解析'param'。这是一个简单的案例,应尽可能简单。 – Starx
添加引号解决了问题而无需解析,但感谢您的建议 –
您可以验证它是这样的:
希望它适合事业:)
FOO - 是字符串;
if (! /^[a-zA-Z0-9]+$/.test(foo)) {
// Validation failed
}
OR
逃生像这样的检查:
if(your_string.indexOf('=') != -1){
alert("equal found.");
}
然后用\\=
更换=
你需要躲避=
与\\=
。
param = param.replace(/=/g, '\\\\=');
但还有其他特殊字符,您还需要在jQuery选择器中进行转义。
function escape(param) {
return param.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\\\$1');
}
您也可以使用.filter
方法。
$('a').filter(function() {
return $(this).attr('href').indexOf(param) !== -1;
})
这也行得通!感谢 –