great write up. one thing to remember when traversing the DOM using native APIs whitespace matters.
e.g. <div>#textnode
<span>#textnode</span>#textnode
</div>e.g. <div>#textnode
<span>#textnode</span>#textnode
</div>