Преобразование текста в ссылку с помощью JavaScript возвращает ошибку - PullRequest
0 голосов
/ 02 апреля 2011
 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 ]

1 голос
/ 02 апреля 2011

link.replace не изменяет текст на месте, он создает новую строку.Попытка изменить строку с link.replace(link... на link = link.replace(link...

1 голос
/ 02 апреля 2011

Функция, подобная link.replace, на самом деле не заменяет вещи внутри строки, она фактически возвращает новую строку с выполненными заменами.Например:

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;
}
0 голосов
/ 02 апреля 2011

Как уже говорили другие, 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. Это делает чтение более трудным, IMHO).

0 голосов
/ 02 апреля 2011

replace возвращает версию строки с выполненной заменой;строка не заменяется на месте.Так что link = link.replace..., а не просто link.replace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...