≪ Today I learned.
RSS購読
    公開日
    タグ
    JavaScript
    著者
    ダーシノ

    Element.closest()で親方向に検索して要素を取得する

    Element.closest()を使うことで、現在の要素から親方向に向かって検索し、CSSセレクターに一致するノードを取得する。

    <div class="ancestor">
      <div class="parent">
        <div class="child"></div>
        <div class="child">
          <!-- 現在の要素 -->
          <div id="current"></div>
        </div>
      </div>
      <div class="parent">取得できない</div>
      <div class="parent">取得できない</div>
      ...
    </div>
    const current = document.querySelector('#current')
    
    const ancestor = current.closest('.ancestor')
    console.log(ancestor)
    // <div class="ancestor">...</div>

    注意点

    親方向に向かって検索するための機能なので、#current.ancestor.parent:last-child のような兄弟要素や .parent:has(.xxx) のような自身の祖先以外の要素は取得できない。

    対応するなら以下のようなことが考えられる。

    const current = document.querySelector('#current')
    const ancestor = current.closest('.ancestor')
    
    const parentHasItem = ancestor.closest('.parent:has(.item)')