Подтвердить что ты не робот

Замените textNode текстом HTML в Javascript?

Я был направлен в проект Linkify на GitHub (https://github.com/cowboy/javascript-linkify) для поиска и "связывания" URL-адресов и доменов, только плавающих в тексте.

Это потрясающе! Он полностью работает над текстом!

Однако я не совсем уверен, как заставить его работать с textNode, который имеет текст, который я хочу связать.

Я понимаю, что textNode имеет только textContent, поскольку.. это весь текст. Так как эта функция Linkify возвращает HTML как текст, есть ли способ взять textNode и "переписать" HTML внутри него с выходом Linkify?

Я играл с ним на JSFiddle здесь: http://jsfiddle.net/AMhRK/9/

function repl(node) {

var nodes=node.childNodes;
for (var i=0, m=nodes.length; i<m; i++)
{
    var n=nodes[i];
    if (n.nodeType==n.TEXT_NODE)
    {
       // do some swappy text to html here?
       n.textContent = linkify(n.textContent);
    }
    else
    {
        repl(n);
    }
}
}
4b9b3361

Ответ 1

Вам нужно будет заменить textNode на элемент HTML, например span, а затем установить ваш связанный текст как этот элемент innerHTML.

var replacementNode = document.createElement('span');
replacementNode.innerHTML = linkify(n.textContent);
n.parentNode.insertBefore(replacementNode, n);
n.parentNode.removeChild(n);

Ответ 2

В дополнение к предыдущему ответу я предлагаю более короткий путь (на основе jQuery):

$(n).replaceWith('Some text with <b>html</b> support');

где n - это textNode.