var f = document.createDocumentFragment();
while (div.firstChild)
f.appendChild(div.firstChild);
noda.parentNode.replaceChild(f, noda);
а так как div пустой то и div.firstChild-а нету, т. е. содержимое while не разу не сработает. И потом нода заменяется на пустой DocumentFragment.
Так в .childNodes попадают undefined.
Решение:
1) В TextNode.each добавляем if (I)
(в последнем моем посте он закоментирован)
И не только для этого случая.
Мало ли в каких ситуациях такое может случиться.
2) Зачем перезаписывать текстовые узлы содержащие пробельные символы.
Добавляем проверку: if (div.firstChild) {
(она тож закоментирована)
В результате пустых div-ов просто не будет.
3) Зачем вообще перезаписывать текстовые узлы содержание которых не изменилось.
Добавляем к проверке еще условие if (div.firstChild && div.innerHTML != noda.nodeValue) {
В посте №20 был пока лучший вариант.