Как получить доступ к следующему брату пользовательского элемента из класса?

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

class DomElement extends HTMLElement {
    constructor() {
        super();
        let shadowRoot = this.attachShadow({mode: 'open'});
        const t = document.currentScript.ownerDocument.querySelector('#x-foo-from-template');
        const instance = t.content.cloneNode(true);
        shadowRoot.appendChild(instance);
    }

    fixContentTop() {
        var sibling = this.nextElementSibling;
        if (sibling) {

        }
    }
}

но sibling становится нулевым

Кто-нибудь знает, как это сделать?

Спасибо

1 ответ

На самом деле это работает, когда в методе, который вызывает this.nextElementSibling, this действительно представляет пользовательский элемент, который имеет родного брата.

В этом примере это работает, потому что благодаря функции стрелки это относится к пользовательскому элементу:

customElements.define('dom-elem', class extends HTMLElement {
  constructor() {
    super()
    var sh = this.attachShadow({mode: 'open'})
    sh.appendChild(document.querySelector('template').content.cloneNode(true))
    sh.querySelector('button').onclick = () =>
      console.log('sibling = %s', this.nextElementSibling.localName)
  }
})
<dom-elem></dom-elem>
<dom-elem></dom-elem>
<template>
  <button>Get Sibling</button>
</template>

Если вы используете function () синтаксис, это будет относиться к <button> и, следовательно, не вернет ни одного родного элемента:

customElements.define('dom-elem', class extends HTMLElement {
  constructor() {
    super()
    var sh = this.attachShadow({mode: 'open'})
    sh.appendChild(document.querySelector('template').content.cloneNode(true))
    sh.querySelector('button').onclick = function () {
      console.log('sibling = %s', this.nextElementSibling)
    }
  }
})
<dom-elem></dom-elem>
<dom-elem></dom-elem>
<template>
  <button>Get Sibling</button>
</template>

Другие вопросы по тегам