[英]How can I change opacity of an image in css without disturbing the overwritten text's opacity
[英]How can I change all instances of a string within an HTML document via JS without disturbing its markup?
我想编写一个脚本,使页面“衰减”,随意改变字符。 假设我有一些看起来像这样的HTML:
<div class="eebee">
Lorem Ipsum <a href="http://example.com">Anchor here</a>
</div>
我想用“Σ”替换“e”的每个实例,这样就可以了
<div class="eebee">
Lor∑m Ipsum <a href="http://example.com">Anchor h∑r∑</a>
</div>
但是,显然,我不希望它
<div class="∑∑b∑∑">
Lor∑m Ipsum <a hr∑f="http://∑xample.com">Anchor h∑r∑</a>
</div>
怎么做到这一点? 一个DOM解析器? 或只是一些正则表达式,搜索内容betwΣΣn“>”和“<”?
编辑:根据Oriol的解决方案,将其放入一个接受任何查找和替换字符串的函数:
function decay(find_string, replace_string) {
var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
while(treeWalker.nextNode()) {
var node = treeWalker.currentNode;
re = new RegExp(find_string, "g");
node.nodeValue = node.nodeValue.replace(re, replace_string);
}
}
您可以编写一个简单的递归函数来迭代所有文本节点:
function iterateTextNodes(root, callback) { for(var i=0; i<root.childNodes.length; ++i) { var child = root.childNodes[i]; if(child.nodeType === 1) { // element node iterateTextNodes(child, callback); // recursive call } else if(child.nodeType === 3) { // text node callback(child); // pass it to callback } } } iterateTextNodes(document.body, function(node) { node.nodeValue = node.nodeValue.replace(/e/g, '∑'); });
<div class="eebee">Lorem Ipsum <a href="http://example.com">Anchor here</a></div>
或者如果您更喜欢内置方式,则可以使用树木助行器
var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); while(treeWalker.nextNode()) { var node = treeWalker.currentNode; node.nodeValue = node.nodeValue.replace(/e/g, '∑'); }
<div class="eebee">Lorem Ipsum <a href="http://example.com">Anchor here</a></div>
一些说明:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.