用Javascript中的HTML文本替换textNode?

时间:2013-03-21 16:43:01

标签: javascript html textnode

我被引导到GitHub上的Linkify项目(https://github.com/cowboy/javascript-linkify),用于查找和“链接”仅浮动在文本中的网址和域名。

太棒了!它完全适用于文本!

但是,我不太确定如何让它在包含我想要链接的文本的textNode上工作。

我理解textNode只有textContent,因为它是所有文本。由于此Linkify函数将HTML作为文本返回,有没有办法获取textNode并使用Linkify输出“重写”其中的HTML?

我一直在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);
    }
}
}

2 个答案:

答案 0 :(得分:17)

您需要将textNode替换为HTML元素(如span),然后将链接文本设置为该元素的innerHTML。

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

答案 1 :(得分:3)

除了之前的回答,我提出了更简短的方法(基于jQuery):

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

其中n - 是textNode。