HierarchyRequestError 4 в IE и Edge при манипуляции с DOM

Я разрабатываю веб-компонент с помощью stencilJS. Я использую слот для рендеринга HTML, но мне нужно изменить HTML перед его рендерингом, для этого я использую функцию querySelector и appendChild для управления DOM. Это нормально работает в Chrome, но вызывает ошибку иерархии в IE и Edge. Вот мой код:

функция рендеринга в TSX:

    render () {
      return (
       <div class={`column-${this.column}`}>
         <slot/>
       </div>
     )
   }

Код для управления DOM:

componentDidLoad () {
    const container = this.element.shadowRoot.querySelector(`.column-${this.column}`) ?
      this.element.shadowRoot.querySelector(`.column-${this.column}`) : this.element.querySelector(`.column-${this.column}`)
    Array.from(this.element.children).forEach(node => {
      const elem = document.createElement('div')
      elem.appendChild(node)
      container.appendChild(elem)
    })
  }

Приведенный выше код отлично работает на Chrome, но выдает ошибку в IE в строке

container.appendChild(elem)

person Prasheel    schedule 23.01.2019    source источник
comment
ShadowRoot - ›Совместимость с браузером   -  person Andreas    schedule 23.01.2019
comment
@Andreas, я согласен с тем, что ShadowDOM не поддерживается IE и Edge, но ошибка не из-за ShadowRoot. Я зарегистрировал контейнер в консоли, и он получает это в IE. Ошибка возникает, когда я пытаюсь вызвать appendChild ()   -  person Prasheel    schedule 23.01.2019
comment
Вы пытаетесь использовать shadowRoot.querySelector для присвоения значения контейнеру. Можете ли вы попробовать использовать простой код JS, чтобы сделать тест в IE, который будет делать то же самое, чтобы проверить, работает он или нет?   -  person Deepak-MSFT    schedule 24.01.2019


Ответы (1)


Наконец-то я достал вот этот.

Ошибка возникла из-за неправильной иерархии, созданной во время выполнения.

Я решил проблему, просто переместив <slot/> за <div>

person Prasheel    schedule 24.01.2019
comment
Из вашего последнего сообщения я вижу, что вы решили свою проблему. Я предлагаю вам пометить свое собственное решение как принятый ответ на этот вопрос, через 24 часа это может помочь другим членам сообщества в будущем в подобных вопросах. Спасибо за понимание. - person Deepak-MSFT; 24.01.2019