bil*_*.cn 7 javascript jquery dom
我想替换给定元素的所有后代元素(的文本)中的特定字符串.
innerHTML不能用,因为这个序列可以出现在属性中.我尝试过使用XPath,但看起来界面基本上是只读的.因为这仅限于一个元素,document.getElementsByTagName所以也不能使用类似的功能.
有人建议任何方式这样做吗?任何jQuery或纯DOM方法都是可以接受的.
编辑:
一些答案表明我试图解决的问题:直接在Element上修改文本将导致删除所有非Text子节点.
所以问题主要归结为如何有效地选择树中的所有Text节点.在XPath中,您可以轻松地执行此操作//text(),但当前的XPath接口不允许您更改这些Text节点.
一种方法是通过递归,如Bergi 的答案所示.另一种方法是使用find('*')jQuery 的选择器,但这有点贵.还在等着看是否有更好的解决方案.
只需使用一个简单的自制 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
Run Code Online (Sandbox Code Playgroud)