замена jQuery на родной Javascript при работе с классами CSS

198
03 января 2019, 12:00

Изучаю вопрос перехода от jQuery к родному Javascript. Подскажите, правильно ли я понимаю, что особенность jQuery в последовательном применении функций к одному объекту в JS пока нет, т.е.

из кода jQuery

$('#content')
    .removeClass('edit-error')
    .removeClass('edit-complete')
    .toggleClass('edit-error', this.m_pageData.is_wrong_text)
    .toggleClass('edit-complete', this.m_pageData.is_completed_text);

к коду Javascript

document.querySelector('#content').classList
    .remove('edit-error')
    .remove('edit-complete')
    .toggle('edit-error', this.m_pageData.is_wrong_text)
    .toggle('edit-complete', this.m_pageData.is_completed_text);

не перейти :(

да и toggle как-то не так работает

Answer 1

Поскольку методы .classList не возвращают объект classList или объект DOM, вы не можете связать с ними цепочку.

Вы можете создать цепочки с помощью небольшого объекта с цепными методами:

function classList (el) { 
  const list = el.classList 
 
  return { 
    toggle (c) {  
      list.toggle(c)  
      return this  
    }, 
    add (c) {  
      list.add(c)  
      return this  
    }, 
    remove (c) {  
      list.remove(c)  
      return this  
    } 
  } 
} 
 
const el = document.querySelector('#content') 
 
classList(el).remove('foo').add('bar').toggle('baz') 
 
console.log(el.className)
<div id="content"></div>

Answer 2

Методы remove, toggle, add не возвращают ссылку на Element.classList поэтому их нельзя вызывать с помощью чейнинга(chaining).

jQuery это обертка над стандартными методами и после вызова он возвращает ссылку на тот же экземпляр $('#content')

READ ALSO
Миграция React-проекта с JavaScript на Typescript. Оставлять Babel?

Миграция React-проекта с JavaScript на Typescript. Оставлять Babel?

В инструкции по миграции проекта на Typescript есть пункт

163
Как объединить все спаны с анимацией?

Как объединить все спаны с анимацией?

У меня раздутый код - дохрена спанов, потому что текстовую анимацию делал без библиотекиЕсть ли способ обернуть уже имеющиеся спаны во что-то,...

145
Не работает Drag&#39;n&#39;drop JS

Не работает Drag'n'drop JS

Задача: есть произвольное количество групп, в каждой группе произвольное количество карточекНужно обеспечить возможность перетаскивания...

136
Не работает смена картинки в плавающем меню

Не работает смена картинки в плавающем меню

Использую на сайте скрипт плавающего меню и хочу что-бы в нем были кнопки с заменой картинки на нихПо отдельности hover работает, а в этом меню...

123