需要知道jQuery UI Widget是否已应用于DOM对象

我正在使用jQuery并与jQuery UI进行一些交互,我需要获取选项。 但是,有可能jQuery UI函数尚未应用于DOM对象。 当我访问一个选项时,我现在收到一个JavaScript错误。

我有一个DOM对象,它附带了进度条( http://docs.jquery.com/UI/Progressbar )(也许)。 在另一个线程中,我正在尝试使用domObj.progressbar("option", "value")访问这些选项。

如何确定domObj是否附加了progressbar

DOM对象将附加一个额外的CSS类:“ui-progressbar”。 如果您在http://docs.jquery.com/UI/Progressbar上查看源代码,那么您可以看到一个带有id = progressbar的div,仅此而已,但如果您使用Firebug并单击该元素,则可以看到它还有更多类别添加。

编辑:我认为@ jamiebarrow的解决方案在这里更正确。

您可以通过执行以下操作来访问元素上的进度条对象:

 $("#myid").data("progressbar") 

所以使用这个:

 var progressBar = $("#myid").data("progressbar"); if ( progressBar == null ) { // handle case when no progressbar is setup for my selector } else { alert("The value is: " + progressBar.value()); } 

根据此讨论 ,检测窗口小部件是否已在元素上呈现的推荐方法如下:

 var hasWidget = $('selector').is(':ui-widgetname'); 

从jQuery UI 1.11开始,可以通过instance方法直接测试小部件:

 var hasProgressbar = ($(element).progressbar("instance") !== undefined); 

文档: http : //api.jqueryui.com/jQuery.widget/#method-instance

我更喜欢在JavaScript中的任何对象上使用hasOwnProperty,因为它每次都返回一个布尔值。

 var hasWidget = $( "selector-here" ).data().hasOwnProperty( "widget-name-here" ); if ( hasWidget ) { // Put your awesome code here. } 

哪个恕我直言比检查null好一点; 如果它切换到undefined会怎样,IMO也应该返回。