2013-11-29 8 views
1

Итак, у меня есть набор плагинов jQuery, действительно базовый материал, но я разделяю код на плагины, потому что мне не нравится иметь огромную функцию jQuery (document) .ready(), где я храню всей логики приложения.Обнаруживать «подключенные» элементы DOM

Каждый плагин имеет «деструктор», который в основном является функцией, которую я определил в объекте прототипа плагина. Эта функция отвязывает события, используемые плагин, удаляет DOM элементов, которые были добавлены с помощью плагина и т.д.

Плагиных инициализируются так:

$('.element').plugin(); 

Есть ли способ, я могу получить все элементы, которые у меня есть подключаемые к ним плагины, из другого плагина, который должен заменить тело HTML, поэтому я могу назвать функцию деструктора?

Я думал хранить каждый экземпляр плагина внутри глобального массива, тогда я могу получить доступ к этому массиву из любого плагина. Но, может быть, есть лучший способ, который не использует глобальное состояние?

+0

Когда я строй JQuery виджетов я использую [пользовательский шаблон, который я написал] (https://github.com/zzzzBov/jQuery-widget .tmpl.js/блоб/ведущий/jqwt/JQuery-widget.tmpl.js). Он включает в себя расширение '$ .expr [':']', чтобы можно было выбрать выбранные виджеты. – zzzzBov

ответ

1

Я не думаю, что для него есть готовый метод ... но в качестве взлома вы можете добавить класс к целевым элементам в своем плагине, а затем использовать этот класс, чтобы получить все элементы с виджетами, инициализированными lke

$.fn.plugin = function(){ 
    this.addClass('my-plugin-class'); 
} 

затем инициализировать

$(element).plugin() 

, чтобы получить все элементы с плагином

$('.my-plugin-class').... 

Но если это виджет JQuery UI, то вы можете использовать селектор $(':ui-widgetname') см this answer

+0

Это действительно хорошая идея, я мог бы выбрать и уничтожить плагины, которые подключены к элементам из определенной области страницы, например '#main .plugin' – Alex

1

Arun P Johny написал Rigth идею - просто удалить «след» вашей работы, пометив затрагиваемые DOM элементов с некоторым определенным именем класса.

Я хочу просто добавить идею. Плагины - это методы библиотеки и ничего больше. Если вам нужно the destroyer для constructor - просто сделать еще один плагин для этого:

$.fn.overture = function(){...};// construct 
$.fn.crescendo = function(){...};// more construct 
$.fn.quietFarewell = function(){...};// destructor for everything above 

$(...).overture().crescendo().quietFarewell(); 
Смежные вопросы