javascript - 替换元素中出现的所有字符串

标签 javascript jquery dom

我想替换给定元素的所有后代元素(的文本)中的特定字符串。

innerHTML 不能使用,因为这个序列可以出现在属性中。我试过使用 XPath,但界面似乎基本上是只读的。因为这仅限于一个元素,所以也不能使用像 document.getElementsByTagName 这样的函数。

有什么建议可以做到这一点吗?任何 jQuery 或纯 DOM 方法都是可以接受的。

编辑:

一些答案​​暗示了我试图解决的问题:直接在元素上修改文本将导致所有非文本子节点被删除。

所以问题本质上归结为如何有效地选择树中的所有文本节点。在 XPath 中,您可以像 //text() 那样轻松地完成它,但是当前的 XPath 接口(interface)似乎不允许您更改这些文本节点。

实现此目的的一种方法是递归,如 answer 中所示。贝尔吉。另一个way就是用jQuery的find('*')选择器,但是这样开销有点大。还在等着看是否有更好的解决方案。

最佳答案

只需使用一个简单的自制 DOM 迭代器,它递归遍历所有节点:

(function iterate_node(node) {
    if (node.nodeType === 3) { // Node.TEXT_NODE
        var text = node.data.replace(/any regular expression/g, "any replacement");
        if (text != node.data) // there's a Safari bug
            node.data = text;
    } else if (node.nodeType === 1) { // Node.ELEMENT_NODE
        for (var i = 0; i < node.childNodes.length; i++) {
            iterate_node(node.childNodes[i]); // run recursive on DOM
        }
    }
})(content); // any dom node

关于javascript - 替换元素中出现的所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11525907/

相关文章:

Javascript:为什么构造函数的 __proto__ 属性为 Empty() { }?

javascript - 将页脚保留在页面底部

javascript - 动态向 javascript 函数传递参数时出错

javascript - 如何从 JavaScript 加载 html5 视频标签中的 src?

javascript - 什么定义了 javascript 全局对象中 DOM `document` 属性的可用性?

Javascript/CSS webkit 过滤器 - 去除特定元素上的模糊

Javascript 更改事件未在 cucumber 测试中触发

javascript - 具有悬停和单击功能的 jQuery 抽屉

javascript - 如何使用jquery在没有iframe的情况下获取body的innerHtml

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?