3

我必须将纯文本网址转换为<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()for 检索只选择第一个匹配的元素。不过,您可以很容易地做到这一点,因为像这样.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 回答