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のドキュメントから:

メタ文字 ( !"#$%&'()*+,./:;<=>?@[]^`{|}~ など) を\ という 2 つのバックスラッシュで文字をエスケープする必要があります。

ここにデモがあります。

于 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 に答える