获取对jquery ui小部件的所有实例的引用?

Hai*_*ood 2 javascript jquery jquery-ui jquery-plugins jquery-ui-widget

我正在编写一个jquery UI小部件,它简单地包装了bootstrap popover插件.在小部件中你可以传递选项'singular',如果传入它,那么它应该调用插件的所有其他实例的函数.

就像是

$('#one').myWidget();
$('#two').myWidget();
$('#three').myWidget();
$('#four').myWidget();

$('#one').myWidget('show'); //stuff from widget one is now visible
$('#two').myWidget('show'); //stuff from widget one and two are now visible
$('#three').myWidget('show'); //stuff from widget one, two and three are now visible
$('#two').myWidget('hide'); //stuff from widget one and three are now visible
$('#four').myWidget('show', {singular:true}); //stuff from widget four is now visible
Run Code Online (Sandbox Code Playgroud)

所以,我认为show函数看起来像:

show: function(options){
    options = options || {};

    if(options.singular){
        var instances = '????'; // how do I get all instances?
        $.each(instances, function(i, o){
            o.myWidget('hide');
        });
    }

    this.element.popover('show');

}
Run Code Online (Sandbox Code Playgroud)

所以,问题是,如何获得对其上包含myWidget小部件的所有元素的引用?

bco*_*rad 8

您可以使用$(':ui-myWidget')那里ui是Widget的命名空间.它比使用类选择器慢,$('.ui-myWidget')因此在创建窗口小部件时添加类仍然是一种好习惯.

jQuery UI的做到这一点对所有有部件,所以你可以得到由每个要么进度$(':ui-progressbar')$('.ui-progressbar').

这篇博文更深入地解释了薄.