Umbrella JS — это компактная библиотека для работы с DOM, манипуляций
элементами и событий в браузере. Одной из важных возможностей является
расширение функционала через регистрацию собственных
методов, что позволяет создавать удобные цепочки вызовов,
аналогичные стандартным методам библиотеки (.addClass(),
.on() и т.д.).
Методы в Umbrella JS регистрируются с помощью функции
u.fn.extend(). Она принимает объект, где ключи — это имена
новых методов, а значения — функции, реализующие их поведение.
Пример базовой структуры:
u.fn.extend({
имяМетода: function(аргументы) {
// this — коллекция элементов Umbrella
return this; // возврат this для цепочек
}
});
Особенности:
this внутри метода всегда ссылается на текущую
коллекцию элементов Umbrella.this.Создадим метод .highlight(), который будет добавлять
элементу класс highlight:
u.fn.extend({
highlight: function() {
this.each(function(el) {
el.classList.add('highlight');
});
return this;
}
});
Использование:
u('p').highlight(); // Все параграфы получат класс 'highlight'
Разбор:
each перебирает все элементы коллекции.
el — текущий DOM-элемент.
После добавления класса возвращается this, что
позволяет продолжить цепочку вызовов:
u('p').highlight().hide();Методы могут принимать параметры для динамической настройки
поведения. Пример: метод .setText(text):
u.fn.extend({
setText: function(text) {
this.each(function(el) {
el.textContent = text;
});
return this;
}
});
Использование:
u('h1').setText('Новый заголовок');
Аргумент text передается внутрь функции и применяется к
каждому элементу коллекции.
Для динамического изменения элементов часто используются колбэки:
u.fn.extend({
updateText: function(callback) {
this.each(function(el, i) {
el.textContent = callback(el, i);
});
return this;
}
});
Использование:
u('li').updateText(function(el, index) {
return `Элемент ${index + 1}: ${el.textContent}`;
});
Особенности:
el — текущий элемент.i — индекс элемента в коллекции.Методы Umbrella JS обычно возвращают коллекцию (this)
для поддержания цепочек. Иногда требуется возвращать конкретные
значения. В этом случае возвращается не коллекция, а
результат операции. Например, метод .firstText() возвращает
текст первого элемента:
u.fn.extend({
firstText: function() {
return this.length ? this[0].textContent : null;
}
});
Использование:
let text = u('p').firstText();
console.log(text);
Методы могут управлять атрибутами и dataset:
u.fn.extend({
setData: function(key, value) {
this.each(function(el) {
el.dataset[key] = value;
});
return this;
},
getData: function(key) {
return this.length ? this[0].dataset[key] : undefined;
}
});
Использование:
u('div').setData('id', '123');
console.log(u('div').getData('id')); // 123
Внутри зарегистрированных методов доступны все стандартные методы Umbrella JS, например:
u.fn.extend({
toggleVisibility: function() {
this.each(function(el) {
u(el).toggleClass('hidden');
});
return this;
}
});
Преимущество:
this — обязательное условие
для методов, которые изменяют элементы..addClass(),
.hide(), .each()).Регистрация собственных методов в Umbrella JS позволяет расширять функционал библиотеки без модификации исходного кода, создавая чистый, читаемый и легко поддерживаемый код для манипуляций с DOM.