1

id私が取り組んでいるページの'は、コロンで区切られた文字列のグループとして定義されています(例thisPage:theForm:address1content)。この形式を変更することはできません。で検証を行おうとしていますaddress1content

idforaddress1contentを関数に渡して、を実行し、replaceAllをに置き換えて、:\\:実行できるようにしようとしてい$(id)ます。動作していません。

これが私が持っているものです:

function validateContent(text) {

var hardCoded=$('#thisPage\\:theForm\\:address1content').val();
alert(hardCoded);

var regex = new RegExp(":", 'g');
replacedText = text.replace(regex, '\\:');  
alert(replacedText);
foundElement= $(replacedText).val();
alert(foundElement);    
}

現在、変数hardCodedは正しく処理されていますが、複数のフィールドを検証できるように、これを動的に実行できるようにしたいと思います。

それが役立つ場合は、簡略化したバージョンをフィドルに貼り付けました:http: //jsfiddle.net/nYeJH/

4

3 に答える 3

4

K、私のコメントが実際に質問に答えたので(タイトルを読むだけで、すべてのコロンの前に二重の円記号を付ける必要があることがわかります)、これが私の答えです:

var foundElement= $(text.replace(/:/g,'\\\\:').val();

4つの円記号:最初の円記号は2番目の円記号をエスケープし、3番目の円記号は4番目の円記号をエスケープし、コロンはコロンのままです。

とはいえ、部分文字列の特定の出現回数に達すると、正規表現はかなり遅くなります。これをベンチマークする必要がありますが、splitを使用すると、わずかに速くなり、(おそらく)読みやすくなる可能性があります。

var foundElement = $(text.split(':').join('\\\\:')).val();//4 slashes still
于 2012-08-17T15:15:19.287 に答える
3

私のコメントのために、本当の理由は#テキストで忘れられていました。

http://jsfiddle.net/nYeJH/6

于 2012-08-17T15:12:52.427 に答える
0

.replace(/:/g,"\\:")完全に正常に機能しているようです(ハードコードされたものについてあなたが言うことが真実であると仮定します)。このjsfiddleを見てください。

ハードコードされたものが実際に機能しておらず、ダブルエスケープが必要な場合は:、これを試してください.replace(/:/g,"\\\\:")

http://jsfiddle.net/SeNy5/

編集:これで、作業できるjsfiddleができたので、CSSセレクターの先頭で誤ってハッシュを省略していることに気づきました。

于 2012-08-17T15:16:09.737 に答える