Jquery - доступ ко всем экземплярам плагина

Я разрабатываю плагин jquery "myPlugin"Кто делает некоторые графические вещи. Это работает хорошо, и я рад этому.

(function ( $ ) {
    $.fn.myPlugin = function(params) {
        /* some code */
        $(this).focus(function() {
            /* draw things */
        });
    };
}( jQuery ));

Я называю это так: $("#foo").myPlugin();

Все работает хорошо: каждый раз, когда элемент получает фокус, плагин срабатывает, рисуя некоторые интересные вещи. Плагин содержит приватную функцию end что я могу в конечном итоге получить доступ извне через функцию close

(function ( $ ) {
    $.fn.myPlugin = function(params) {
        /* some code */
        $(this).focus(function() {
            /* draw things */
        });
        function end(){
            /* destroy the draw */
        }
        return{
             close: function() { end(); }
        }
    };
}( jQuery ));

Эта функция позволяет мне закрыть плагин "извне".

var bar = $("#foo").myPlugin();    // create the graphic
bar.close();                       // destroy the graphic for this element

Все по-прежнему работает хорошо! Но теперь у меня есть проблема: я хотел бы получить доступ ко всем плагинам. Допустим, мне нужно создать случайное число:

var bar1 = $("#foo1").myPlugin();
var bar2 = $("#foo2").myPlugin();
var bar3 = $("#foo3").myPlugin();

Мне бы хотелось, чтобы, когда элемент получил фокус (и начал рисовать), он уничтожил все остальные существующие:

когда:

$("#foo1").focus();    // make the draw

это тоже:

bar2.close();    // destroy an eventual draw of #foo2
bar3.close();    // destroy an eventual draw of #foo3

И вот... я заблокирован. Как получить доступ ко всему происходящему из моего плагина? Я думал сохранить где-нибудь все имена переменных (bar1, bar2, bar3, ...), чтобы получить к ним доступ, но я не могу получить их через плагин. Или в конце концов создайте второй промежуточный плагин, который запустит myPlugin и хранить имена... Я в замешательстве. Есть идеи?

Ура <3

1 ответ

You can do something like this

(function ( $ ) {
    $.fn.myPlugin = function(params) {
        /* some code */
        $(this).focus(function() {
        //clear previous things
        $('.myplugin').parent().remove()// or remove your markings
        //append
        $(this).append('<div class=".myplugin"></div>')
        /* draw things */
        });
        function end(){
            /* destroy the draw */
        }
        return{
             close: function() { end(); }
        }
    };
}( jQuery ));

Очистите все такие родители или маркеры div, когда вы сосредоточитесь, добавьте временный div к идентификатору вашего плагина.

Другие вопросы по тегам