Библиотека Cash предоставляет облегчённую альтернативу jQuery с основным набором методов для работы с DOM, событиями и анимацией. Однако она не включает весь функционал jQuery. Некоторые методы отсутствуют, и для их реализации требуется использование альтернативных подходов или комбинаций существующих возможностей Cash.
В Cash присутствуют методы .addClass(),
.removeClass(), .toggleClass(),
.hasClass(), что перекрывает основные задачи работы с
классами. Отсутствуют методы .attr() с полной
функциональностью и .prop() для работы с
DOM-свойствами.
Альтернатива .attr() для получения и установки
атрибутов:
// Получение атрибута
const value = document.querySelector('#element').getAttribute('data-value');
// Установка атрибута
document.querySelector('#element').setAttribute('data-value', 'новое значение');
Для множественных элементов можно использовать Cash вместе с циклом:
$('.items').each((el) => {
el.setAttribute('data-index', '1');
});
Альтернатива .prop():
// Пример: работа с checkbox
const checkbox = document.querySelector('#agree');
checkbox.checked = true;
const isChecked = checkbox.checked;
Методы jQuery, такие как .wrap(),
.unwrap(), .replaceWith(), в Cash не
реализованы напрямую. Их можно заменить комбинацией базовых методов
DOM.
Оборачивание элемента (.wrap()):
const element = document.querySelector('.item');
const wrapper = document.createElement('div');
wrapper.className = 'wrapper';
element.parentNode.insertBefore(wrapper, element);
wrapper.appendChild(element);
Разворачивание (.unwrap()):
const wrapper = document.querySelector('.wrapper');
while(wrapper.firstChild) {
wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
}
wrapper.parentNode.removeChild(wrapper);
Замена элемента (.replaceWith()):
const oldElement = document.querySelector('.old');
const newElement = document.createElement('div');
newElement.textContent = 'Новый элемент';
oldElement.parentNode.replaceChild(newElement, oldElement);
Cash поддерживает .on() и .off() для
базовой работы с событиями, но отсутствует поддержка некоторых
специфических событий jQuery (например, .hover(),
.toggle() для кликов).
Эмуляция .hover():
$('.button').on('mouseenter', (e) => {
e.target.style.backgroundColor = 'lightblue';
}).on('mouseleave', (e) => {
e.target.style.backgroundColor = '';
});
Альтернатива .toggle() для клика:
const button = document.querySelector('.toggle-button');
let isActive = false;
button.addEventListener('click', () => {
isActive = !isActive;
button.style.display = isActive ? 'block' : 'none';
});
Cash поддерживает только .fadeIn(),
.fadeOut(), .fadeToggle(). Метод
.slideUp()/.slideDown() отсутствует.
Анимация с плавным скрытием
(slideUp):
function slideUp(element, duration = 300) {
element.style.height = element.offsetHeight + 'px';
element.style.transitionProperty = 'height, margin, padding';
element.style.transitionDuration = duration + 'ms';
element.offsetHeight; // trigger reflow
element.style.height = 0;
element.style.paddingTop = 0;
element.style.paddingBottom = 0;
element.style.marginTop = 0;
element.style.marginBottom = 0;
setTimeout(() => {
element.style.display = 'none';
element.style.removeProperty('height');
element.style.removeProperty('padding-top');
element.style.removeProperty('padding-bottom');
element.style.removeProperty('margin-top');
element.style.removeProperty('margin-bottom');
element.style.removeProperty('transition-duration');
element.style.removeProperty('transition-property');
}, duration);
}
Плавное раскрытие (slideDown):
function slideDown(element, duration = 300) {
element.style.removeProperty('display');
let display = window.getComputedStyle(element).display;
if(display === 'none') display = 'block';
element.style.display = display;
const height = element.offsetHeight;
element.style.height = 0;
element.style.overflow = 'hidden';
element.style.transitionProperty = 'height, margin, padding';
element.style.transitionDuration = duration + 'ms';
element.offsetHeight;
element.style.height = height + 'px';
setTimeout(() => {
element.style.removeProperty('height');
element.style.removeProperty('overflow');
element.style.removeProperty('transition-duration');
element.style.removeProperty('transition-property');
}, duration);
}
Методы jQuery для работы с Ajax ($.ajax,
.load(), .get(), .post()) в Cash
отсутствуют. В современном JavaScript используется
fetch.
fetch('/api/data', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
Для работы с GET-запросами:
fetch('/api/data')
.then(response => response.json())
.then(data => console.log(data));
Для большинства отсутствующих методов Cash предоставляет достаточно возможностей через нативные API браузера. Основные подходы включают:
querySelectorAll,
getAttribute, setAttribute,
classList для управления DOM и атрибутами.fetch для сетевых запросов вместо встроенного
Ajax..on() и чистого JavaScript для событийного
делегирования и специальных обработчиков.Эти методы позволяют сохранять лёгкость Cash, одновременно обеспечивая функциональность, аналогичную jQuery, при минимальном увеличении объёма кода.