Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Comments on How to make this treewalker code having a regular for loop or a forEach() method?
Parent
How to make this treewalker code having a regular for loop or a forEach() method?
Credit for User:Meriton for developing the following code (first published here).
function replaceIn(e) {
if (e.nodeType == Node.TEXT_NODE) {
e.nodeValue = e.nodeValue.replaceAll("a", "");
} else {
for (const child of e.childNodes) {
replaceIn(child);
}
}
}
replaceIn(document.body);
I don't want to use a for...of
loop here by principle, because I personally think its syntax is confusing.
How to make this tree walker having a regular for
loop instead, or, alternatively, a forEach()
method instead?
Post
The following users marked this post as Works for me:
User | Comment | Date |
---|---|---|
user56529 | (no comment) | May 3, 2022 at 16:33 |
I personally think its syntax is confusing.
Well, it's just a matter of getting used to it, I guess :-)
Anyway, this code is just looping through all childNodes
and in each iteration it calls the replaceIn
function, passing the element as argument.
Therefore, you could replace the for..of
with a traditional for
loop:
function replaceIn(e) {
if (e.nodeType == Node.TEXT_NODE) {
e.nodeValue = e.nodeValue.replaceAll("a", "");
} else {
for (let i = 0; i < e.childNodes.length; i++) {
replaceIn(e.childNodes[i]);
}
}
}
Or you could use the forEach
method:
function replaceIn(e) {
if (e.nodeType == Node.TEXT_NODE) {
e.nodeValue = e.nodeValue.replaceAll("a", "");
} else {
e.childNodes.forEach(replaceIn);
}
}
With both, you achieve the same result.
0 comment threads