So it turns out that setting textContent replaces the child node:  http://stackoverflow.com/a/17203046/144067

It might be faster to explicitly create text nodes and set their nodeValue as in the SO post.  Profile and see.