Опасность! getElementsByTagName возвращает «живой» NodeList. В коде Джоэла удаление элемента 0 перемещает элементы в списке вниз, так что при удалении элемента 1 вы пропустили один.
Возможные альтернативы: если вы знаете, что всегда будете удалять каждый элемент, вы можете использовать цикл while:
var tables= document.getElementsByTagName('table');
while (tables.length>0)
tables[0].parentNode.removeChild(tables[0]);
Или, если вы можете или не можете удалить, но порядок итераций не важен, просмотрите список в обратном порядке:
var tables= document.getElementsByTagName('table');
for (var i= tables.length; i-->0;)
tables[i].parentNode.removeChild(tables[i]);
Если вы можете, а можете и не удалить и , вам нужно выполнить итерацию вперед, вам надоело копировать список:
function toArray(l) {
var a= [];
for (var i= 0; i<l.length; i++)
a[i]= l[i];
return a;
}
var tables= toArray(document.getElementsByTagName('table'));
for (var i= 0; i<tables.length; i++)
...