Модификация дерева Javascript - PullRequest
0 голосов
/ 12 апреля 2010

Как изменить "тело" дерева dom следующим образом, используя javascript:

Original htm:    <html> <head></head>   <body>  blah blah blah  </body>  </html>

Modified html:    <html>  <head> </head>  <abc> <body> blah blah blad </body> </abc> </html>

То есть я хочу поместить весь узел body в другой узел.

Код, который я пытаюсь использовать:

// Создать iframe

var orig_iframe = document.createElement ('iframe');

// Копировать содержимое тела внутри iframe (надеюсь!)

orig_iframe.contentDocument.innerHTML = document.body.innerHTML;

// Установить нулевое тело документа

document.body.innerHTML = '';

// Добавить iframe в тело

document.body.appendChild (orig_iframe);

который не работает. Очевидно, я что-то упустил!

Спасибо!

1 Ответ

1 голос
/ 12 апреля 2010

orig_iframe.contentDocument.innerHTML = document.body.innerHTML;

Нет свойства innerHTML на HTMLDocument, только на HTMLElement. Возможно, вы захотите установить innerHTML в элементе iframe body.

Однако при записи iframe s в браузере появляются морщины.

var html= document.body.innerHTML;
var iframe= document.createElement('iframe');
document.body.appendChild(iframe);
var idoc= 'contentDocument' in iframe? iframe.contentDocument : iframe.contentWindow.document;
idoc.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head></head><body></body></html>');
idoc.close();
idoc.body.innerHTML= html;

Бизнес с contentWindow необходим для IE до версии 7, которая не поддерживает стандартное свойство contentDocument.

Вызов write() должен обеспечить присутствие минимального документа в iframe, чтобы вы могли затем установить innerHTML в его теле. Декларация <!DOCTYPE в нем необходима для перевода этого окна в режим стандартов (который, как мы надеемся, также используется в основном документе).

В то время как вы могли бы document.write содержимое HTML для нового документа, это заставило бы все элементы <script> внутри тела снова выполняться в новом документе, что, вероятно, вам не нужно. Запись в innerHTML позволяет избежать немедленного выполнения любых сценариев в строке.

...