2011-01-21 7 views
8

単語のすべてのインスタンスを自動的にリンクにする方法はありますか?キーワードを自動的にリンクにする

ので、例えば、毎回私は「りんご」を書き込み、自動的に私はjqueryの可能性がjavascriptやを使用することができますと仮定してい<a href="www.apple.com" class="whatever" target="_blank">apple</a>

にフォーマットされます。

ありがとうございました!

答えて

7

非常に非常に簡単な例...

jQueryの

var span = $('span'); 
    span.html(function(i,html){ 
     replaceTextWithHTMLLinks(html); 
    }); // jQuery version 1.4.x 


function replaceTextWithHTMLLinks(text) { 
    var exp = /(apple)/ig; 
    return text.replace(exp,"<a class='link' href='http://www.$1.com' target='_blank' >$1</a>"); 
} 

HTML

<span> 
An apple a day, makes 7 apples a week! 
</span> 

demo

+1

これは、ページ上のすべてのスパンのHTMLを置き換えます。その代わりにスパンで 'each'を使用してください。まず – Reid

+0

、どのように 'each()'があなたの問題を解決するのでしょうか?それはここのポイントではなく、単なる例でもあります。私は '$( 'body');と言うことさえできます。 OPはそれについて言及しなかった。 :) – Reigel

+2

'each'を使ってすべてのスパンを繰り返し、そのHTMLを個別に置き換えると(そうする前にキーワードの存在をテストしたいと思うかもしれませんが)、すべてのスパンを置き換えません同じ内容のページで... – Reid

5

ここでトリックを行う必要があり、単純なjQueryプラグインです。テキストノードのみを選択するので、クラスappleまたはid appleの要素がある場合、置き換えられません。あなたはそれが置き換えられ得ることはありませんリンク<a href="#">apple</a>を持っている場合はさらに、(あなたが必要とするよりも、もう少しかもしれないが、私はとにかく、私はそれを投稿しようと思いました):

(function($) { 
    $.fn.replacetext = function(target, replacement) { 
     // Get all text nodes: 
     var $textNodes = this 
       .find("*") 
       .andSelf() 
       .contents() 
       .filter(function() { 
        return this.nodeType === 3 && 
         !$(this).parent("a").length; 
       }); 

     // Iterate through the text nodes, replacing the content 
     // with the link: 
     $textNodes.each(function(index, element) { 
      var contents = $(element).text(); 
      contents = contents.replace(target, replacement); 
      $(element).replaceWith(contents); 
     }); 
    }; 
})(jQuery); 

使用法:

$("body").replacetext(/apple/gi, "<a href='http://www.$&.com'>$&</a>"); 

実行例:http://jsfiddle.net/andrewwhitaker/VmHjJ/

$("*")セレクタの使用により、これはむしろ非効率的になる可能性があることに注意してください。可能であれば、より具体的なものに置き換えるか、または.find("*").andSelf()部分を完全に削除して、プラグインをより具体的なセレクタに渡す必要があります。

+0

いいえ、これは完璧に見えます!私は秒でそれを試してみます –

+0

@ブラックマジックトロピカル:これはあなたのために働いたのですか? –

+0

いくつかのiframeを含むセレクタを除いて、ここではうまくいきます:_permissionプロパティ "document" _にアクセスすることが拒否されました。 – Anse

関連する問題