代码之家  ›  专栏  ›  技术社区  ›  Boycs

确定元素是否为jqueryui小部件

  •  6
  • Boycs  · 技术社区  · 14 年前

    我已经使用小部件工厂编写了一个jquery ui小部件…

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

    我的InvestmentGrid小部件是在容器上创建的,

     $('#container').investmentGrid()
    

    我需要能够确定代码中的其他地方,如果$(‘container’)已经是一个investmentgrid

    5 回复  |  直到 9 年前
        1
  •  6
  •   Dan Story    14 年前

    可以查询元素的 jQuery.data() 功能,如:

    if ($('#container').data('investmentGrid')) {
       ...
    }
    
        2
  •  5
  •   Brandon Joyce    14 年前

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

        3
  •  3
  •   Erik Allen    11 年前

    @丹的故事可能在他回答的时候就有了答案,但我发现这个方法已经不起作用了。嗯,不完全是。至少不适用于jqueryui 1.10。根据文件 http://api.jqueryui.com/jQuery.widget/ 在“实例”部分中,您现在需要具有小部件的全名。

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

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

    然后,要检查容器是否有它,您需要检查以下内容:

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

    仅仅使用这个名字已经不够了。

        4
  •  1
  •   Assign Labs    14 年前

    @博伊斯:根据我的理解,使用小部件工厂可以防止你在同一个元素上多次实例化一个插件。(参考文献: http://jqueryui.pbworks.com/widget-factory )

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

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

    有关详细信息,请参阅docs.jquery.com/ui_开发者指南。

        5
  •  1
  •   Sebastian Zartner Emmanouil Chountasis    9 年前

    jquery ui的当前版本(我可以用1.11.x确认)允许您通过 instance() 方法。然后看起来像这样:

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

    如果元素没有 investmentGrid 分配的小部件,您将获得 undefined 回来。

    您也可以使用以下方法:

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

    这样做的好处是,即使没有加载小部件,它也能工作。