使用空选择器调用具有命名空间的窗口小部件的安全方法

时间:2016-02-01 17:55:21

标签: javascript jquery jquery-ui widget

jQueryUi $.widget工厂创建可以在两个方面使用的类:

  1. $("mySelector").myWidget(myOptions);和
  2. $.myNamespace.myWidget(myOptions, mySelector)
  3. 第一种方法不支持小部件的命名空间,所以我更喜欢使用第二个版本。我的问题是,当mySelector与任何html元素(即$(mySelector).length == 0)匹配时,支持命名空间的版本会引发异常。有没有漂亮的方法来避免这个问题?我正在开发一个内部框架,并且不希望有不必要的if条件。

    作为参考,我已经读过(我想我明白了):

1 个答案:

答案 0 :(得分:1)

这两个电话都不完全一样。第一个将迭代选择器的每个元素并应用小部件,但不应用第二个。 参见:



$.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>
&#13;
&#13;
&#13;

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

就像这样:

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

$('.empty').each(function(){
	$.ui.draggable('', this)
});
&#13;
div
{
  width: 100px;
  height: 100px;
  border: solid black;
}
&#13;
<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>
&#13;
&#13;
&#13;