Создание цепочечных методов для работы с DOM‑элементами

Каждый метод должен изменять выбранный DOM-элемент и возвращать один и тот же объект-обёртку. Тогда вызовы можно соединить в цепочку.

Короткий ответ

Что ответить на собеседовании

Каждый метод должен изменять выбранный DOM-элемент и возвращать один и тот же объект-обёртку. Тогда вызовы можно соединить в цепочку.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию $, которая будет возвращать объект, поддерживающий цепочку вызовов методов для манипуляций с выбранным элементом. Метод addClass должен добавлять указанный CSS‑класс, html — вставлять переданный HTML‑код внутрь элемента, toggleClass — переключать наличие класса, а css — принимать объект со стилями и применять их к элементу. Все методы должны возвращать тот же объект, чтобы их можно было вызывать последовательно.

import "./helpers";

function $(selector) {
  //code here
}

// пример использования
// const $node = $(".js-node");

// $node.addClass("bordered").html("<li>hello</li>").toggleClass("disabled").css({
//   color: "green",
//   padding: "10px"
// });

Ответ

Каждый метод должен изменять выбранный DOM-элемент и возвращать один и тот же объект-обёртку. Тогда вызовы можно соединить в цепочку.

function $(selector) {
  const node = document.querySelector(selector);
  if (!node) throw new Error('Элемент не найден');
  const api = {
    addClass(name) { node.classList.add(name); return api; },
    html(value) { node.innerHTML = value; return api; },
    toggleClass(name) { node.classList.toggle(name); return api; },
    css(styles) {
      for (const [name, value] of Object.entries(styles)) {
        if (name.startsWith('--') || name.includes('-')) node.style.setProperty(name, value);
        else node.style[name] = value;
      }
      return api;
    }
  };
  return api;
}

Метод html предназначен только для доверенной разметки. Для пользовательского текста используйте textContent либо проверенную очистку HTML.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее