jQueryUi $.widget
工厂创建可以在两个方面使用的类:
$("mySelector").myWidget(myOptions)
;和$.myNamespace.myWidget(myOptions, mySelector)
。第一种方法不支持小部件的命名空间,所以我更喜欢使用第二个版本。我的问题是,当mySelector
与任何html元素(即$(mySelector).length == 0
)匹配时,支持命名空间的版本会引发异常。有没有漂亮的方法来避免这个问题?我正在开发一个内部框架,并且不希望有不必要的if
条件。
作为参考,我已经读过(我想我明白了):
答案 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;
要使其等效,您需要使用 $。每个,这会将其应用于选择器中的所有元素,并消除您的错误。
就像这样:
$('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;