使用命名空间和空选择器调用小部件的安全方法

Safe way to call a widget with namespace, with empty selector

jQueryUi $.widget 工厂创建了 类,可用于两种方式:

  1. $("mySelector").myWidget(myOptions);和
  2. $.myNamespace.myWidget(myOptions, mySelector).

第一种方式不支持小部件的命名空间,所以我更喜欢使用第二种方式。我的问题是当 mySelector 不匹配任何 html 元素(即 $(mySelector).length == 0)时,支持命名空间的版本会抛出异常。有什么漂亮的方法可以避免这个问题吗?我正在开发一个内部框架,不想有不必要的 if 条件。

作为参考,我已经阅读(并且我想我理解了):

这两个调用并不完全相同。第一个将遍历 selector 的每个元素并应用 widget,但第二个不会。 参见:

$.ui.draggable('', 'div')
div {
  width: 100px;
  height: 100px;
  border: solid black;
}
.ui-draggable {
  border: solid blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<div>
</div>
<div>
</div>

要使其等效,您需要使用 $.each,这会将它应用于选择器中的所有元素并消除您的错误。

例如这样:

$('div').each(function(){
 $.ui.draggable('', this)
});

$('.empty').each(function(){
 $.ui.draggable('', this)
});
div
{
  width: 100px;
  height: 100px;
  border: solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
 <script type="text/javascript" src="//code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<div>
</div>
<div>
</div>