6

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

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

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

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

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

4

5 回答 5

7

您需要对字符进行转义,因为它在 jQuery选择器=中使用时具有特殊含义。以下是需要转义的所有字符的完整列表:

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

因此,您可以使用以下内容来转义param

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

从 jQuery文档

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

这是一个演示

于 2012-08-31T03:14:27.013 回答
3

引用参数:

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

如果这还不够(param可能包含撇号)然后转义它们:

$("a[href*='"+param.replace(/'/g,"\\'")+"']")
于 2012-08-31T03:14:38.410 回答
2

你需要逃避=with \\=

param = param.replace(/=/g, '\\\\=');

但是在 jQuery 选择器中还需要转义其他特殊字符。

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

您也可以使用该.filter方法。

$('a').filter(function() {
  return $(this).attr('href').indexOf(param) !== -1;
})
于 2012-08-31T03:18:06.630 回答
0

它的行为是这样的,因为最后它会转化为模棱两可的选择器,即$("a[href*=xkey=123]")确实是无效的。

用 infront 转义等号\\并用引号包裹参数部分

var param = "xkey\\=123";
$("a[href*='"+param+"']").css("color", "red");
于 2012-08-31T03:15:05.613 回答
0

您可以像这样验证它:

希望它适合原因:)

foo - 是字符串;

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

或者

像这样检查逃脱它:

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

然后替换=\\=

于 2012-08-31T03:17:00.943 回答