Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает замена элементов на фрагмент (https://javascript.ru/forum/misc/85477-ne-rabotaet-zamena-ehlementov-na-fragment.html)

nail2010 15.09.2023 18:12

Не работает замена элементов на фрагмент
 
Друзья, почему не работает этот код:

let tt = document.getElementById("1234");
let frag = document.createDocumentFragment();
frag.innerHTML = tt.innerHTML;
tt.replaceWith(frag);


Элемент удаляется и все...

Aetae 15.09.2023 18:19

У фрагмента нет свойства innerHTML.

Не очень понятно, что ты тут вообще пытаешься сделать и зачем?

Так чтобы работало, это можно сделать подобным образом:
let tt = document.getElementById("1234");
tt.outerHTML = tt.innerHTML;
но это очень плохой код, т.к потеряются все обработчики на детях.

Код по-лучше так(но всё ещё не понятна цель):
let tt = document.getElementById("1234");
let frag = document.createDocumentFragment();
frag.append(...tt.childNodes);
tt.replaceWith(frag);
или, проще, так:
let tt = document.getElementById("1234");
tt.replaceWith(...tt.childNodes);

nail2010 15.09.2023 18:36

Благодарю за ответ! Мне нужно удалить родительский элемент, оставив его содержимое, например:

<div><p>text</p></div>
<div>text</div>

Aetae 15.09.2023 18:41

Ещё можно через css сделать элементу:
display: contents;

удалён он не будет, но вести себя станет так как будто его нет.:)

nail2010 15.09.2023 18:59

Нет, так не подходит мне.. Дело в том, что я пишу небольшой редактор текста, у которого ограниченный набор стилей, ну то есть можно сделать только пару заголовков, курсив, жирный и подчеркнутый, примерно так и есть кнопка "сделать простым текстом"... Все это в редактируемом контейнере DIV, отправляется AJAXом на сервер и там уже парсится HTML-код...

Все бы отлично, но хочется сделать все по уму и защиту от дураков, это когда выделяют половину заголовка и половину другого тега, приходится их изменять на простой текст, как правило целиком... Вот и получается у меня на выходе тег HTML, из которого нужно выдергнуть все содержимое и поставить вместо этого тега..

voraa 16.09.2023 07:07

Так еще можно

let tt = document.getElementById("1234");
tt.before(...tt.childNodes);
tt.remove();


Часовой пояс GMT +3, время: 13:14.