JS只替换没有html标签和代码的文本 [英] JS replace only text without html tags and codes

查看:51
本文介绍了JS只替换没有html标签和代码的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在不改变任何html标签或js代码的情况下替换文档中的一些词.

I want to replace some words of the document without changing any html tags or js codes.

基本上我所做的是;

document.body.innerHTML = document.body.innerHTML.replace('lorem','new lorem');

但是此代码将替换任何lorem".我想避免像这样的标签;

But this code will replace any 'lorem'. I want to avoid tags like; <script... var lorem = 123; <div class="lorem", <a id="lorem" etc.

如何在 JS 中执行此操作?

How can I do this in JS?

推荐答案

遍历 DOM,以及 .replace() 文本节点的值.

Walk the DOM, and .replace() the values of text nodes.

function walk(el, fn) {
    for (var i = 0, len = el.childNodes.length; i < len; i++) {
        var node = el.childNodes[i];
        if (node.nodeType === 3)
            fn(node);
        else if (node.nodeType === 1 && node.nodeName !== "SCRIPT")
            walk(node, fn);
    }
}

<小时>

walk(document.body, function(node) {
    var text = node.data.split("foo"),
        parent = node.parentNode,
        i = 1,
        newNode;

    parent.insertBefore(textNode(text[0]), node);

    for (; i < text.length; i += 2) {
        (newNode = document.createElement("b"))
                           .appendChild(textNode("bar"));
        parent.insertBefore(newNode, node);
        parent.insertBefore(textNode(text[i]), node);
    }
    parent.removeChild(node);
});

function textNode(txt) {
    return document.createTextNode(txt);
}

这篇关于JS只替换没有html标签和代码的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆