Javascript jQuery UI可排序默认选择器?
我最近遇到了一个问题,花了我几分钟来解决,这让我对排序表中jqueryui项选项使用的默认选择器感到困惑。考虑一个portlet示例。我试图从sortable中排除项目,因此没有调用:Javascript jQuery UI可排序默认选择器?,javascript,jquery,jquery-ui,jquery-ui-sortable,Javascript,Jquery,Jquery Ui,Jquery Ui Sortable,我最近遇到了一个问题,花了我几分钟来解决,这让我对排序表中jqueryui项选项使用的默认选择器感到困惑。考虑一个portlet示例。我试图从sortable中排除项目,因此没有调用: $( ".column" ).sortable({ connectWith: ".column" }); 我用过: $( ".column" ).sortable({ connectWith: ".column", items: ':not(.fixed)' }); 由于默认行为是
$( ".column" ).sortable({
connectWith: ".column"
});
我用过:
$( ".column" ).sortable({
connectWith: ".column",
items: ':not(.fixed)'
});
由于默认行为是将列中的每个portlet添加到可排序列表中,所以我假设我只能从中排除一个类。然而,我看到了奇怪的行为。上面的代码使portlet的每个子元素都可以排序,如下所示:。显然,这是可以通过以下方式解决的:
$( ".column" ).sortable({
connectWith: ".column",
items: '.portlet:not(.fixed)'
});
我意识到:not本身应该选择所有不符合选择器条件的元素,所以我的问题是,为什么默认行为只选择父元素,然后为什么:不超越此行为并选择子元素
如果这是一个简单的问题,我道歉 我认为正确的选择应该是:
$(".column").sortable({
connectWith: ".column",
items: '>:not(.fixed)'
});
该选项的默认值为项:'>*',
(可排序元素的每个直接后代,)
参考:
演示:
我正在检查代码,以了解为什么它会将可排序项附加到由项匹配的项上
更新
我认为问题的出现是因为jQuery UI函数:
_create: function() {
var o = this.options;
this.containerCache = {};
this.element.addClass("ui-sortable");
//Get the items
this.refresh();
//Let's determine if the items are floating
this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false;
//Let's determine the parent's offset
this.offset = this.element.offset();
//Initialize mouse events for interaction
this._mouseInit();
},
通过调用this.refresh()代码>它正在调用this.\u刷新项目(事件)代码>向起始选择器和附加项的所有匹配元素添加特定的可排序项
选项,因此,所有元素都具有广泛的可排序行为。我的理解正确吗:items:'>*'将是简单的英语“在可排序实例化时指定的父元素的所有直接子元素”,因此>将等同于“直接(或第一)子元素”,从而消除了:not的递归性质?看来我需要更新我的选择器,谢谢@Swires是的,我试着更好地检查它(),我试着查看jQuery UI代码,以了解问题的原因,非常感谢。我知道如何解决这个问题,我只是想知道为什么会这样,现在我明白了。