我想在评论中链接用户。到目前为止,我已经完成了后端工作(在Django中),而现在我正在努力应对前端工作。当注释的名称前面有字符“ @”时,我设法用JavaScript编写了一些使用户名可点击的文件。

function urlify(texts) {
    var urlRegex = /(@[^\s]+)/g;
    return texts.replace(urlRegex, function(url) {
      return '<a href="/profiles/' + url.substr(1) + '/">' + url + '</a>';
    })
}

var texts = $(".content1").text();

var html = urlify(texts);

$('.test1').prepend(html);
$('.content1').prepend(html);


现在,我可以获得第一个评论,并使用户名可点击。

如何重写代码,以便替换每个注释?我想到了一个for循环,但不确定如何编写。有一种简单的方法可以用一个函数替换模板上的所有“ @”吗?

最佳答案

var string = 'Hey @user123, can you upload a file';
function urlify(texts) {
  var urlRegex = /(@[\w]+)/g;
  return string.replace(urlRegex, function(match){
    var name = match.slice(1);
    return '<a href="/users/profiles/' + name + '">' + match + '</a>'
  })
}

console.log(urlify(string));


返回Hey <a href="/users/profiles/user123">@user123</a>, can you upload a file

编辑多个:

使用字符串Hey @ user123,您可以上传文件吗,否则可以使用@admin看一下

产量:

Hey <a href="/users/profiles/user123">@user123</a>, can you upload a file, otherwise <a href="/users/profiles/admin">@admin</a> can you take a look

...因此不需要循环。

编辑2:

function urlify(texts) {
  var urlRegex = /(@[\w]+)/g;
  return texts.replace(urlRegex, function(match){
    var name = match.slice(1);
    return '<a href="/users/profiles/' + name + '">' + match + '</a>'
  })
}

$(document).ready(function(){
  var text = $('.comment').html(function(index, text) {
    return urlify(text)
  });
});


http://plnkr.co/edit/tehEF4ESYXf4TTRR5lz8?p=preview

09-27 13:21