jQuery セレクターを使用して、href の文字をチェックしています。
var param = "something";
$("a[href*="+param+"]").css("color", "red");
これは、「何か」に = 記号が含まれるまで正常に機能します。例えば:
var param = "xkey=123";
$("a[href*="+param+"]").css("color", "red");
その後、結果が得られません。誰でも解決策を知っていますか?
jQueryセレクター=で使用すると特別な意味を持つため、文字をエスケープする必要があります。エスケープする必要があるすべての文字の完全なリストは次のとおりです。
#;&,.+*~':"!^$[]()=>|/
したがって、次を使用して をエスケープできますparam。
param.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1')
jQueryのドキュメントから:
メタ文字 ( !"#$%&'()*+,./:;<=>?@[]^`{|}~ など) を\ という 2 つのバックスラッシュで文字をエスケープする必要があります。
ここにデモがあります。
パラメータを引用します。
$("a[href*='"+param+"']")
それが十分でない場合 (paramアポストロフィが含まれる場合があります)、それらをエスケープします。
$("a[href*='"+param.replace(/'/g,"\\'")+"']")
=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;
})
最終的にあいまいなセレクター、つまり$("a[href*=xkey=123]")実際に無効なセレクターに変換されるため、そのように動作しています。
infront で等号をエスケープし\\、パラメーター部分を引用符で囲みます
var param = "xkey\\=123";
$("a[href*='"+param+"']").css("color", "red");
次のように検証できます。
それが原因に適合することを願っています:)
foo - 文字列です。
if (! /^[a-zA-Z0-9]+$/.test(foo)) {
// Validation failed
}
また
次のチェックのようにエスケープします。
if(your_string.indexOf('=') != -1){
alert("equal found.");
}
次に置き換え=ます\\=