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