переместить существующий DIV в динамически созданный iFrame no jqerry - PullRequest
0 голосов
/ 26 марта 2019

Попытка переместить существующий DIV:

<div id="wrapper"></div>

для динамически созданного iFrame:

var iframe = document.createElement('iframe');
iframe.name="newIframe";
iframe.id= "newIframe";
wrapper.parentNode.appendChild(iframe);
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
iframeDoc.open();
iframeDoc.write("<html><head></head><body></body></html>");
iframeDoc.close();
iframeBody = iframeDoc.body;
var iparent=iframeDoc.body;
var iparentDummy= document.createElement('div');
iparentDummy.id="dummy"
iparent.appendChild(iparentDummy);

Это создает iframe вне существующей DIV-оболочки. Новый iframe содержит пустой "фиктивный" DIV. Однако попытайтесь переместить «обертку» внутри тега тела iframe, чтобы заменить "Dummy" DIV с существующей "оболочкой" DIV:

var dummyID=document.getElementById("dummy");
dummyID.parentNode.replaceChild(dummyID,wrapper);

выдает ошибку "Не удается прочитать свойство 'parentNode' из null". Что я не так делаю?

1 Ответ

1 голос
/ 26 марта 2019

Поскольку "фиктивный" div находится внутри iFrame, вызов document.getElementById('dummy') вернет ноль.document.getElementById только ищет элементы в оригинальном документе веб-страницы.iFrames - это отдельный документ.Таким образом, ваш вызов dummyId.parentNode пытается получить доступ к parentNode со значением NULL (поскольку в исходном документе нет фиктивного элемента), что приводит к вашей ошибке.


Вам необходимо получить элемент "фиктивный" изiFrameDoc.Попробуйте это:

var dummyID = iframeDoc.getElementById("dummy");
dummyID.parentNode.replaceChild(document.getElementById('wrapper'), dummyID);

Обратите внимание, что вам также нужно изменить вызов replaceChild, так как аргументы (newElem, oldElem), вы, похоже, поменяли их местами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...