Каков наилучший способ создать библиотечную агностическую оболочку для селекторов библиотеки JS? У меня есть пользовательская JS-инфраструктура, которая стремится быть как можно более доступной для библиотеки. Проблема заключается в том, что, например, Mootools улучшает возвращаемый элемент DOM с помощью собственных специальных методов (ввод, принятие и т. Д.), И я не хочу, чтобы они были видимыми для модулей, расположенных поверх фреймворка (как Николас Закас однажды описал), чтобы предотвратить злоупотребления/несчастные случаи.Как сделать аглографическую селекторную упаковку JS-библиотеки?
В качестве простой первой помощи я создал пользовательский селектор, который использует Mootools, затем создает пользовательский Element -объект/обертку, а руки выбрали (и улучшили) Mootools DOM-элемент, поэтому усовершенствованные методы Mootools не видны напрямую к модулям выше. Проблема с этим подходом заключается в том, что я теряю всю встроенную функциональность элемента DOM (значение, стиль и т. Д.), Если он специально не закодирован для обертки (Element).
Есть ли другой и/или лучший способ сделать это? Что-то, что расширит собственный элемент DOM, тем самым автоматически предоставив собственные свойства/методы и предложив расширенную функциональность через оболочку (через Mootools, jQuery, whatnot ...).
Некоторые примеры кода, как это делается в настоящее время:
/*
* Wrap the native library element
*/
Element = function(_libElement) {
// Store native object
var libElement = _libElement;
return {
addClass: function(_class) { libElement.addClass(_class); return this; },
removeClass: function(_class) { libElement.removeClass(_class); return this; },
hasClass: function(_class) { return libElement.hasClass(_class); }
};
};
/*
* Custom selector
*/
getElement = function(_query) {
var elements = $$(_query);
// Wrap each element to Element wrapper
var num = elements.length;
while(num--) {
elements[num] = new Element(elements[num]);
}
return elements;
};
Можете ли вы предоставить код? У меня возникли проблемы с визуализацией именно того, что вам нужно ... –
Добавлен код примера – crappish