jquery选择器包含等号

时间:2012-08-31 03:09:49

标签: jquery selector equals sign

我正在使用jQuery选择器检查href中的字符:

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

这可以正常工作,直到“某事物”包含=符号。例如:

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

然后我没有结果。有人知道解决方案吗?

5 个答案:

答案 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.");
}

然后将=替换为\\=