2009-06-03 29 views
1

mailto:タグを含むhrefのonclickイベントへの呼び出しを追加したいとします。正規表現を使用して部分文字列を置換する

<a href="mailto:[email protected]"> 

そして中にそれを変更します:

は例えば、私は、任意のインスタンスをしたい私がいる

<a href="mailto:[email protected]" onclick="return function();"> 

問題のmailto文字列の値があるということです一致しない。

「」と一致する文字列に '>'文字のすべてのインスタンスを 'onclick="return function();">'に置き換える必要があります。

私はREreplacenocase()関数を使用してColdFusionでこれを行いますが、一般的なRegExの提案は大歓迎です。

+2

<必須:「正規表現で非正規言語(HTMLなど)を解析しないでください!」コメントはこちら> – Svante

答えて

3

以下はすべてにあなたのonclickを追加します:DOMが完全にあらゆる可能なマークアップの形成を予想していない正規表現から発生する可能性が欠けているマッチや偽陽性の可能性を排除使っ

プラス、 MAILTO含まれているリンクは、文字列str withing:この正規表現は何をするか

REReplaceNoCase(
    str, 
    "(<a[^>]*href=""mailto:[^""]*""[^>]*)>", 
    "\1 onclick=""return function();"">", 
    "all" 
) 

を、それは電子メールのリンク(IEのように見えるいかなる<a ...>タグを見つけることであるのmailto Pを使用してhref属性を持っています。 rotocol)、onclick属性を追加します。タグの最後までは、<a>の他の属性が保持されるように、最初の逆参照(置換文字列では\ 1と呼ばれます)に格納されます。

2

これが唯一の目的はJavaScriptイベントハンドラを追加することだが、私はRegexが最良の選択だとは思わない。 JavaScriptを使用してJavaScriptイベントを接続すると、JSが利用できない場合(たとえば、マークアップ全体にonclick cruftが散在するのではなく、何も起こりません)、より優雅な品質低下が起こります。

function myClickHandler() { 
    //do stuff 
    return false; 
} 

var links = document.getElementsByTagName('a'); 
for(var link in links) { 
    if(link.href.indexOf('mailto:') == 0) { 
     link.onclick = myClickHandler; 
    } 
} 
1

jQueryのようなライブラリを使用してフロントエンドでこれを行うのはなぜですか?

$(function(){ 
$("a[href^=mailto]").click(function(){ 
    // place the code you want to execute here 
}) 
}); 
関連する問題