Почему некоторая информация отсутствует при клонировании узла DOM?

avatar
codeThinker123
8 августа 2021 в 20:07
48
0
0

Я пытаюсь клонировать узел 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. Из журналов консоли видно, что это не так.

enter image description here

Я не нашел подобного случая и мне интересно, что я мог делать неправильно.

Спасибо

Источник
Eliseo
8 августа 2021 в 21:26
0

почему бы вам просто не продублировать компонент и с помощью ViewChild изменить стиль и положение?

codeThinker123
9 августа 2021 в 06:35
0

@Eliseo Я не уверен, что вы имеете в виду, но я думаю, что причина в том, что этот код на самом деле не часть компонента, а скорее директива. то, что я пытаюсь сделать, это создать сложную анимацию. Этот код будет частью директивы, которую можно применить к компоненту любого типа. Неизвестно в принципе. Ему придется копировать компонент любого типа на лету.

Ответы (0)