В Angular поиск ближайшего к заданной цели элемента является общим требованием при работе с объектной моделью документа (DOM). Если вам нужно пройти вверх по дереву DOM или найти ближайшего родственника, Angular предлагает несколько методов для эффективного выполнения этой задачи. В этой статье блога мы рассмотрим различные методы и примеры кода, которые помогут вам легко найти ближайший элемент в Angular.
Метод 1: QuerySelector и Element.closest()
Один из самых простых способов найти ближайший элемент в Angular — объединить возможности методов querySelectorи Element.closest(). Допустим, у нас есть целевой элемент с определенным селектором, и мы хотим найти ближайший родительский элемент, соответствующий другому селектору. Вот как этого можно добиться:
const targetElement = document.querySelector('.target');
const closestParent = targetElement.closest('.parent');
Метод 2: обход дерева DOM
Другой подход к поиску ближайшего элемента — обход дерева DOM вручную. Этот метод полезен, когда вам нужно найти определенный элемент, который нелегко выбрать с помощью селекторов. Вот пример того, как это можно сделать:
function findClosestElement(targetElement: HTMLElement, selector: string): HTMLElement | null {
  let currentNode = targetElement.parentElement;
  while (currentNode !== null && !currentNode.matches(selector)) {
    currentNode = currentNode.parentElement;
  }
  return currentNode;
}
const targetElement = document.querySelector('.target');
const closestElement = findClosestElement(targetElement, '.parent');
Метод 3: использование Angular Renderer2
Если вы предпочитаете более специфичный для Angular подход, вы можете использовать класс Renderer2, предоставляемый Angular. Renderer2предлагает методы управления DOM и способ перемещения и поиска ближайшего элемента. Вот пример того, как вы можете его использовать:
import { Component, Renderer2, ElementRef } from '@angular/core';
@Component({
  selector: 'app-example',
  template: '<div class="target"></div>',
})
export class ExampleComponent {
  constructor(private renderer: Renderer2, private elementRef: ElementRef) {
    const targetElement = this.elementRef.nativeElement.querySelector('.target');
    const closestParent = this.findClosestElement(targetElement, '.parent');
  }
  findClosestElement(targetElement: HTMLElement, selector: string): HTMLElement | null {
    let currentNode = targetElement.parentElement;
    while (currentNode !== null && !currentNode.matches(selector)) {
      currentNode = currentNode.parentElement;
    }
    return currentNode;
  }
}
В этой статье мы рассмотрели различные методы поиска ближайшего элемента в Angular. Мы рассмотрели методы использования querySelectorи Element.closest(), ручной обход дерева DOM и использование класса Angular Renderer2. В зависимости от вашего конкретного варианта использования вы можете выбрать метод, который лучше всего соответствует вашим потребностям.
Помните: понимание того, как найти ближайший элемент, является ценным навыком при работе с Angular и манипулированием DOM. Освоив эти методы, вы сможете с легкостью создавать динамические и интерактивные веб-приложения.