确定标准 jQueryUI 小部件的类型

Determining the type of a standard jQueryUI widget

我无法确定给定 jQueryUI 小部件实例的类型。

jQueryUI documentation for the Widget Factory 提出了两种技术。来自 "Instance" 部分:

The widget's instance can be retrieved from a given element using the instance() method. [...] If the instance() method is called on an element that is not associated with the widget, undefined is returned.

the :data selector can also determine whether an element has a given widget bound to it.

根据他们的例子,假设我初始化了一个日期选择器,然后代码检查它是否是一个日期选择器:

<p>Date: <input type="text" id="datepicker"> </p>

  $(function() {
    $("#datepicker").datepicker();

    // ...
    var i = $("#datepicker").progressbar("instance"); // i is undefined as expected
    console.log(i);
    var b = $("#datepicker").is(":data('ui-datepicker')"); // b = false, not sure why
    console.log(b);
    var i2 = $("#datepicker").datepicker("instance"); // this throws an exception
    console.log(i2);
  });

根据文档,我预计 .is 对 return 的调用为真,最后一行 return 实例(不抛出异常。)

JSFiddle is here。 (您需要打开浏览器的控制台才能看到记录的输出。)

事实证明我上面列出的技术适用于许多 jQueryUI 小部件,例如按钮,进度条。

但是日期选择器有点奇怪。在初始化日期选择器后查看 DOM,我看到日期选择器作为新元素插入 命名元素之后。

要获取日期选择器小部件实例,我需要从命名元素开始导航 DOM。要检查输入字段上是否有日期选择器,我们可以简单地检查 class hasDatepicker:

的元素
var isDatePicker = $("#datepicker").is(".hasDatepicker");

这适用于 jQueryUI 1.11.2,并且基于其他 SO 问题,它自 2009 年以来一直在使用。所以我想这是一种可靠的技术,但我不确定它是否在任何地方记录,或保证未来版本。