试图使用javascript将文本区域中的链接替换为超链接会导致数组错误

Trying to replace link with hyperlink in textarea using javascript gives array error

本文关键字:超链接 替换 错误 数组 链接 javascript 区域 文本      更新时间:2023-09-26

每当用户在文本区域中键入并在其中发布某个链接时,我都会立即将其更改为链接,就像stackoverflow.com在任何人键入时所做的那样https://stackoverflow.com/?q=and+消息+继续+直到+结束,但每当有人传递任何非链接文本时,它都会返回到文本外观。。。

这是我的尝试,我已经做了什么,在我把它发布到下面之前,让我告诉你我不是javascript学生,我只是试图剪切粘贴,使用我的其他编程逻辑,并试图实现它。所以,无论何时回复,都要考虑我没有扎实的javascript背景。

感谢

我的尝试如下:-

function isUrl(s) {
    var regexp = /(ftp|http|https):'/'/('w+:{0,1}'w*@)?('S+)(:[0-9]+)?('/|'/(['w#!:.?+=&%@!'-'/]))?/
        return regexp.test(s);
    }
$('#status').keyup(function() {
    var value = $("#status").val();
    var words = value.split(" ");
    for (var i=0;i<words.length;i++)
    {
        var n = isUrl(words[i]);
        if (n)  {
            var deadLink = '<a href="'+words[i]+'" target="_blank" rel="nofollow">'+words[i]+'</a>';
            words[i].replace(words[i], deadLink);
        }
    }
});

这不起作用,我在这里没有得到任何错误,但当我在没有数组索引的情况下使用它时,如下所示,我得到了数组错误:-

for (var i=0;i<words.length;i++)
{
    var n = isUrl(words);
    if (n)  {
    var deadLink = '<a href="http://google.com/search?q='+words+'" target="_blank" rel="nofollow">'+words+'</a>';
    words.replace(words, deadLink);
    }
}

有什么办法解决它吗?

感谢

主要问题:

  • 您的replace()调用没有效果,因为您没有将它们分配给任何内容
  • 您没有使用生成的words数组,只是处理了它。。。什么都没有

我做了一些更改:

  • 添加一行以转义键入的文本:

    var value = $('<div/>').text(nonEscapedValue).html();
    
  • 更改了replace()的行以分配replace()的结果:

    words[i] = words[i].replace(words[i], deadLink);
    
  • 最后添加一行,将处理后的数组放入div:

    $("#myResultDiv").html(words.join(" "));
    

最终代码(请在此处查看jsfiddle演示):

function isUrl(s) {
    var regexp = /(ftp|http|https):'/'/('w+:{0,1}'w*@)?('S+)(:[0-9]+)?('/|'/(['w#!:.?+=&%@!'-'/]))?/;
    return regexp.test(s);
}
$('#status').keyup(function() {
    var nonEscapedValue = $("#status").val();
    // added line below to escape typed text
    var value = $('<div/>').text(nonEscapedValue).html();
    var words = value.split(" ");
    for (var i=0;i<words.length;i++)
    {
        var n = isUrl(words[i]);
        if (n)  {
            var deadLink = '<a href="'+words[i]+'" target="_blank" rel="nofollow">'+words[i]+'</a>';
            // changed line below to assign replace()'s result
            words[i] = words[i].replace(words[i], deadLink);
        }
    }
    // added line below to put the result in to the div #myResultDiv
    $("#myResultDiv").html(words.join(" "));
});

希望这能帮助你实现目标。