使用JavaScript将文本转换为链接会返回错误

时间:2011-04-02 17:03:59

标签: javascript web

 function assert() {
     document.write.apply(document, arguments);   
    }

var testLink = "google.com";

    function makeIntoLink(link) {
        if (link.match(/^[a-zA-Z0-9]+(.com)/)) {
            link.replace(link, "<a href=\"http://www." + link+ "\">" + link + "<\/a>");
        }
        return link;
    }



    assert(makeIntoLink(testLink));

它写下来但不是链接形式。只是“google.com”没有链接。什么可能出错?

4 个答案:

答案 0 :(得分:1)

link.replace不会原位更改文本,而是创建一个新字符串。尝试将行从link.replace(link...更改为link = link.replace(link..

答案 1 :(得分:1)

link.replace这样的函数实际上并没有替换字符串中的内容,它实际上返回了一个带有替换的NEW字符串。例如:

function replaceText() {
    var searchText = ".com";
    var link = "google.com";

    var newLink = link.replace(searchText, ".co.uk");

    alert(link); // Output = "google.com"
    alert(newLink); // Output = "google.co.uk"

}

在您的情况下,您根本不需要使用string.replace(...),而是可以这样做:

function makeIntoLink(link) {
    if (link.match(/^[a-zA-Z0-9]+(.com)/)) {
        //link.replace(link, "<a href=\"http://www." + link+ "\">" + link + "<\/a>"); <-- OLD
        link = "<a href=\"http://www." + link+ "\">" + link + "<\/a>"; // <-- NEW
    }
    return link;
}

答案 2 :(得分:0)

replace 返回字符串的版本,并替换为;字符串不是原位替换的。所以link = link.replace...而不仅仅是link.replace

答案 3 :(得分:0)

正如其他人所说,replace不会更改变量,只会返回一个新变量。但在这种情况下,你真的不想替换某些东西,你只想连接一些东西。

IMO,您不需要replace功能:

function makeIntoLink(link) {
    if (link.match(/^[a-zA-Z0-9]+(.com)/)) {
        link = '<a href="http://www.' + link + '">' + link + '</a>';
    }
    return link;
}

(我还通过对JS字符串文字和HTML属性使用不同的引号字符来删除\"转义。这使得它更难以阅读,恕我直言。