3

プレーンテキストのURLをに変換する必要があります<a href=""></a>。動作するJSコードを見つけました。私の問題は、HTML構造でコードを変更し、現在のコードをforeach内に配置する必要があることです。

私のhtml:

<div class="content">Some text with links</div>
<div class="content">Some text with links</div>
<div class="content">Some text with links</div>
<div class="content">Some text with links</div>
<div class="content">Some text with links</div>
<div class="content">Some text with links</div>

JS:

$(function()
{
    var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/ig;    
    $('.content').html($('.content').html().replace(re, '<a href="$1" title="">$1</a>'));
});

上記のJSは機能しますが、すべてのdivに同じコンテンツを入力します。このコードをforeachに入れようとしましたが、失敗しました。私の貧弱なJSの知識は、私にSOでこれを尋ねさせます。

このコードをforeachループに入れる方法についていくつかの手がかりを与えることができますか?

4

3 に答える 3

4

.html()取得のために、最初に一致した要素のみを選択します。.htmlただし、のような関数は、選択した各要素を個別に反復する設定の関数引数を取ることができるため、これは非常に簡単に実行できます。

$(".content").html(function (_, html) {
   return html.replace(re ...etc...);
});
于 2013-01-29T16:29:07.050 に答える
4

のような関数.htmlは、関数を渡すことを許可します。次に、.eachループが内部で実行され、さらに現在の値が渡されます。

$('.content').html(function(i, current) {
  return current.replace(re, '<a href="$1" title="">$1</a>');
});
于 2013-01-29T16:29:33.433 に答える
2

私があなたの質問を正しく理解した場合は、各.contentdivをループする必要があります。これを試してください。

$('.content').each(function() {
    var $content = $(this);
    var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/ig;    
    $content.html($content.html().replace(re, '<a href="$1" title="">$1</a>'));
});
于 2013-01-29T16:29:38.967 に答える