2012-08-31 158 views
6

我使用jQuery选择在HREF检查字符:jQuery选择包含等号

var param = "something"; 
$("a[href*="+param+"]").css("color", "red"); 

这工作得很好,直到“东西”包含一个等号(=)。例如:

var param = "xkey=123"; 
$("a[href*="+param+"]").css("color", "red"); 

然后我得不到结果。任何人都知道解决方案

回答

6

您需要转义=字符,因为它在用于jQuery selector时具有特殊含义。下面是需要转义所有字符的完整列表:

#;&,.+*~':"!^$[]()=>|/ 

因此,你可以使用以下方法来逃避param

param.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1') 

从jQuery documentation

如果您希望使用任何元字符(如 !“#$%&'()* +,。/:; < =>?@ [] ^`{|}〜)作为字面部分一个名字,你必须用两个反斜杠 转义字符:\。

这是DEMO

+0

这也行得通!感谢 –

3

报价参数:

$("a[href*='"+param+"']") 

如果这还不够(param可能包含引号),然后逃逸他们:

$("a[href*='"+param.replace(/'/g,"\\'")+"']") 
+0

+1,我怀疑是最简单的解决方案,可以处理任何参数。 –

+0

非常好 - 正是我需要的。谢谢 –

0

它表现这样监守,在年底将翻译以模棱两可的选择器即$("a[href*=xkey=123]")这确实是无效的。

逃生等号\\盈与报价包住参数部分

var param = "xkey\\=123"; 
$("a[href*='"+param+"']").css("color", "red"); 
+0

在这种简单的情况下,应该有一个或另一个(引用参数或转义'=')。 –

+0

是的,没有必要为所有的符号解析'param'。这是一个简单的案例,应尽可能简单。 – Starx

+0

添加引号解决了问题而无需解析,但感谢您的建议 –

0

您可以验证它是这样的:

希望它适合事业:)

FOO - 是字符串;

if (! /^[a-zA-Z0-9]+$/.test(foo)) { 
    // Validation failed 
} 

OR

逃生像这样的检查:

if(your_string.indexOf('=') != -1){ 
    alert("equal found."); 
} 

然后用\\=

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; 
})