Replace All Text That Displaying In Browser
Solution 1:
This code seems to work for me:
$('*').contents().filter(function() {
returnthis.nodeType == Node.TEXT_NODE && this.nodeValue.trim() != '';
}).each(function() {
this.nodeValue = '@@@@';
});
Basically, it replaces the contents of each text node with @@@@
.
For a demo, see here: http://jsfiddle.net/K8544/3/
Solution 2:
Try this one. It's a function that replaces inner text with "*", but only if its inner HTML is equal to its inner text. Otherwise, it calls itself recursively, navigating down the DOM until it reaches the innermost element.
$(document).ready(function() {
functionreplaceChildren(node) {
if ($(node).html() == $(node).text()) $(node).text("@@@@");
else {
$(node).children().each(function() {
replaceChildren(this);
});
}
}
replaceChildren($("body"));
});
It's not perfect, but should be pretty close for most purposes. I tried it on a Stack Overflow page, and most text got replaced. The only place it doesn't work is where there is stray markup and text within the same tag, for example <div>Here is some inner text <strong>and markup</strong></div>. Maybe this suffices for your purpose though ...
Solution 3:
A JQuery-only solution:
$("body *").contents().wrap("<obscure></obscure>");
$("obscure").each(function(i,e) {if ($(e).children().length==0) $(e).replaceWith("@@@@");});
$("obscure > *").unwrap();
http://jsfiddle.net/cranio/CW9jY/1/
This code wraps EVERY node with a custom tag (obscure
); the use of .contents()
makes sure we wrap ALSO the pure text nodes.
Then we substitute the obscure
nodes which have no children (that were text-only nodes before) with @@@@, hence eliminating also the obscure
tags.
Finally, we unwrap the other elements that were wrapped with <obscure>
.
Solution 4:
You can match anything between two tags - these don't have to be the same tag. For instance, <div>aaa<a href="bbb">ccc dd</a></div>
, it would find aaa
, replace it with @@@
, then find ccc dd
and replace it with @@@ @@
by looking between >
and the next <
.
<scripttype="text/javascript">functionobscure() {
var newhtml = document.body.innerHTML.split("<");
for (var i=1; i<newhtml.length; i++) {
var list = newhtml[i].split(">");
newhtml[i] = (list[0]) + ">" + ((list[1]).replace(/[^@\s]/gim, "@"));
}
newhtml[0] = (newhtml[0].replace(/[^@\s]/gim, "@"));
document.body.innerHTML = newhtml.join("<");
}
</script>
(Note: This does not replace whitespace, since that appeared to be causing some issues).
Post a Comment for "Replace All Text That Displaying In Browser"