LINUX.ORG.RU

JS: элемент теряет родителя


0

0

Пробую написать велосипед без использования фреймворков - rich editor c максимально абстракцией от окружающего кода. Логика вполне ясна и понятна - взять iframe и включить ему design mode. Проблема возникает, когда хочется убить позаботится об особо одаренных (расширением noscript, например) пользователях:

казалось бы, что может быть проще - у кого выключен js отдавать обычную textarea, у кого включен - рисовать поверх iframe. Но после последней строчки editor теряет родителя, и следовательно все offset'ы становятся нулевыми - выровнять iframe поверх textarea становится невозможно.

var editor = document.getElementById(editorId);
editor.parentNode.innerHTML += '<iframe id="topedit" style="position:absolute;display:none"></iframe>';

Варианты решения?

★★★★★

Ответ на: комментарий от friday

>Или заюзать какой-нибудь фреймворк типа jquery.

Который внутри себя имеет тот же кривой InnerHTML

anonymous ()

я может не очень понял, прошу не винить

function replaceHtml(el, html) {
   var oldEl = typeof el === "string" ? document.getElementById(el) : el;
   /*@cc_on
      oldEl.innerHTML = html;
      return oldEl;
   @*/
   var newEl = oldEl.cloneNode(false);
   newEl.innerHTML = html;
   oldEl.parentNode.replaceChild(newEl, oldEl);
   return newEl;
};


var editor = document.getElementById(editorId);
replaceHtml(editor.parentNode,'<iframe id="topedit" style="position:absolute;display:none">'+editor.innerHTML+'</iframe>');
antony986 ()
Ответ на: комментарий от antony986

Спасибо, вариант antony986 вполне рабочий, но я уже сделал по совету Сволочи без innerHTML с добавляя ноды через DOM.

Orlangoor ★★★★★ ()
Ответ на: комментарий от Orlangoor

Ну и правильно сделал. Ибо innerHTML - это костыль

boombick ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.