确定元素是否是jQueryUI小部件

时间:2010-05-24 06:03:24

标签: jquery-ui widget

我使用Widget Factory编写了一个jquery-ui小部件......

我需要能够在代码中确定该元素是否已经是一个小部件......

我的investmentGrid小部件是在上创建的

 $('#container').investmentGrid()

我需要能够在代码的其他地方确定$('#container')是否已经是投资网格

5 个答案:

答案 0 :(得分:6)

您可以查询元素的jQuery.data()函数,如下所示:

if ($('#container').data('investmentGrid')) {
   ...
}

答案 1 :(得分:5)

您可以尝试使用窗口小部件工厂时为您创建的伪选择器。 $(":namespace-widgetname")

答案 2 :(得分:3)

@ dan-story可能在他回答时得到了答案,但我发现这种方法不再适用了。好吧,不完全是。至少不是jQueryUI 1.10。根据“实例”部分中http://api.jqueryui.com/jQuery.widget/处的文档,您现在需要拥有窗口小部件的全名。

例如,如果您使用以下方法创建小部件工厂:

$.widget("Boycs.investmentGrid", ...);

然后,要检查容器是否有,请检查:

if ($('#container').data('Boycs-investmentGrid'))
{
    ...
}

仅仅使用名称已经不够了。

答案 3 :(得分:1)

@Boycs:根据我的理解,使用Widget Factory可以防止您在同一元素上多次实例化插件。 (参考:http://jqueryui.pbworks.com/widget-factory

此外,如果您想确认“容器”是否已经是投资网格,您可以在插件代码中尝试以下选项:

  

this.element.data( “investmentGrid”)   ===这个;

有关详细信息,请参阅docs.jquery.com/UI_Developer_Guide

答案 4 :(得分:1)

当前版本的jQuery UI(我可以使用1.11.x确认)允许您通过instance()方法查询窗口小部件的实例。这将是这样的:

$('#container').investmentGrid('instance')

如果元素没有分配investmentGrid窗口小部件,则会返回undefined

你也可以使用这个来代替:

$(#container').is(':data("namespace-investmentGrid")')

这样做的好处是,即使未加载小部件也可以使用它。