如何用foreach / each替换相同的类名?

时间:2013-01-29 16:27:21

标签: javascript jquery

我必须将纯文本网址转换为<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循环的线索?

3 个答案:

答案 0 :(得分:4)

用于检索的

.html()仅选择第一个匹配的元素。但是,您可以非常轻松地执行此操作,因为.html之类的函数可以采用函数参数进行设置,以便单独迭代每个选定的元素。

$(".content").html(function (_, html) {
   return html.replace(re ...etc...);
});

答案 1 :(得分:4)

.html这样的函数允许传递函数。然后在内部完成.each循环,此外,您将获得当前传递的值:

$('.content').html(function(i, current) {
  return current.replace(re, '<a href="$1" title="">$1</a>');
});

答案 2 :(得分:1)

如果我正确理解了你的问题,你需要循环遍历每个.content div,试试这个:

$('.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>'));
});