Решение, приведенное выше, работало очень медленно и приводило к краху Firefox для меня. Поэтому я немного оптимизировал его, и теперь он отлично работает (основная проблема заключалась в неоднократных ссылках на объект коллекции HTML node.childNodes).
Спасибо за отличную отправную точку, но я решил, что это стоит опубликовать:
function myNormalize(node) {
for (var i=0, children = node.childNodes, nodeCount = children.length; i<nodeCount; i++) {
var child = children[i];
if (child.nodeType == 1) {
myNormalize(child);
continue;
}
if (child.nodeType != 3) { continue; }
var next = child.nextSibling;
if (next == null || next.nodeType != 3) { continue; }
var combined_text = child.nodeValue + next.nodeValue;
new_node = node.ownerDocument.createTextNode(combined_text);
node.insertBefore(new_node, child);
node.removeChild(child);
node.removeChild(next);
i--;
nodeCount--;
}
}