我想替换给定元素的所有后代元素(的文本)中的特定字符串。
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/