Я пытаюсь клонировать узел DOM и добавить его в дом с исходным, но с преобразованием нескольких свойств.
Я работаю с Angular, но я считаю, что это не должно быть фактором, поскольку я в основном напрямую запрашиваю DOM.
Вот мой код для запроса компонента к DOM, его клонирования и добавления обратно в DOM в новой абсолютной позиции.
const selector = `[hero-id='${heroId}']`;
const component = this.document.querySelector(selector);
console.log('The component HTML here is', component)
if (component) {
const rect: DOMRect = component.getBoundingClientRect();
const { top, left } = rect;
const newPosition = {
left: (left || 0) + window?.scrollX,
top: (top || 0) + window?.scrollY,
height: component.clientHeight,
width: component.clientWidth
}
console.log('The component textContent here is', component?.textContent)
console.log('The component innerHTML here is', component?.innerHTML)
console.log(`Returning`, JSON.stringify(newPosition))
const newNode = component.cloneNode(true);
this.renderer.setStyle(newNode, 'position', 'absolute');
this.renderer.setStyle(newNode, 'top', `${newPosition.top}px`);
this.renderer.setStyle(newNode, 'left', `${newPosition.left}px`);
this.renderer.setStyle(newNode, 'width', `${newPosition.width}px`);
this.renderer.setStyle(newNode, 'height', `${newPosition.height}px`);
this.document.getElementsByTagName('body')[0].appendChild(newNode)
Но после этого часть информации исходного компонента отсутствует в клонированном компоненте. Самое главное текст.
Прочитав множество статей, это должно быть свойство узла textContent
или innerHTML
. Из журналов консоли видно, что это не так.
Я не нашел подобного случая и мне интересно, что я мог делать неправильно.
Спасибо
почему бы вам просто не продублировать компонент и с помощью ViewChild изменить стиль и положение?
@Eliseo Я не уверен, что вы имеете в виду, но я думаю, что причина в том, что этот код на самом деле не часть компонента, а скорее директива. то, что я пытаюсь сделать, это создать сложную анимацию. Этот код будет частью директивы, которую можно применить к компоненту любого типа. Неизвестно в принципе. Ему придется копировать компонент любого типа на лету.