Задать вопрос
@Newer123

Как не дублировать код в функции типа Immediately Invoked Function Expression в JS?

Познакомился с типом такой функции как Immediately Invoked Function Expression.
Написал код, но не получается его оптимизировать и не писать одно и тоже дважды. Вот код:
const descriptionTextFunctions = (function () {

     const expand = () => {

          const dtTable = document.querySelector('.description_text');

          const dtMax = document.querySelector('.description_text-maximize-icon');

          const dtMin = document.querySelector('.description_text-minimize-icon');

          dtMax.addEventListener('click', function () {
               
dtTable.classList.remove('description_collapse');
               dtMax.classList.add('icon-hidden');
               dtMin.classList.remove('icon-hidden');
         })

     }


     const collapse = () => {
          const dtTable = document.querySelector('.description_text');
          const dtMax = document.querySelector('.description_text-maximize-icon');
          const dtMin = document.querySelector('.description_text-minimize-icon');

          dtMin.addEventListener('click', function () {
               dtTable.classList.add('description_collapse');
               dtMin.classList.add('icon-hidden');

               dtMax.classList.remove('icon-hidden');

         })
     }


     return {
          expand,

          collapse
    }
}());


И выносил эти переменные перед "expand", и добавлял в обьект, но все безуспешно и потом при загрузке страницы пишет ошибку, что не удалось получить элемент. Только при таком решении код заработал, но понимаю что это не оптимизированно.
Подскажите, пожалуйста, как оптимизировать код и не писать эти строки дважды?
624b1e33ac2ca017656924.jpeg
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
XanXanXan
@XanXanXan
Можно вынести получение элементов в функцию.

const descriptionTextFunctions = (function () {
    const getElements = () => {
        const dtTable = document.querySelector('.description_text');
        const dtMax = document.querySelector('.description_text-maximize-icon');
        const dtMin = document.querySelector('.description_text-minimize-icon');
        return [dtTable, dtMax, dtMin];
    }

    const expand = () => {
       const [dtTable, dtMax, dtMin] = getElements();
        dtMax.addEventListener('click', function () {
            dtTable.classList.remove('description_collapse');
            dtMax.classList.add('icon-hidden');
            dtMin.classList.remove('icon-hidden');
        })
    }

    const collapse = () => {
        const [dtTable, dtMax, dtMin] = getElements();
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы