Пример
Наивный (и неверный! ) будет:
var victims = document.querySelectorAll('body *');
for( var i = 0; i < victims.length; i++ ) {
victims[i].innerHTML = " " + victims[i].innerHTML + " ";
}
Но как только вы запустите его, вы обнаружите, что все ваши элементы были уничтожены!Потому что, когда вы меняете innerHTML
, вы также изменяете дочерние элементы.Но мы можем избежать этого, не заменяя контент, а добавляя его:
var padLeft = document.createTextNode( " " );
var padRight = document.createTextNode( " " );
victims[i].appendChild( padRight );
victims[i].insertBefore( padLeft, victims[i].firstChild );
Выглядит круто!Но, о нет, мы испортили теги нашего скрипта, изображения и так далее.Давайте исправим это тоже:
var victims = document.querySelectorAll('body *');
for( var i = 0; i < victims.length; i++ ) {
if( victims[i].hasChildNodes ) {
var padLeft = document.createTextNode( " " );
var padRight = document.createTextNode( " " );
victims[i].appendChild( padRight );
victims[i].insertBefore( padLeft, victims[i].firstChild );
}
}
Вот вам сценарий :) Он не кросс-браузерный вплоть до Netscape4, но достаточно для понимания основной идеи.