是否可以覆盖jQuery-ui可排序小部件的已定义选项?

时间:2015-06-07 16:45:10

标签: javascript jquery jquery-ui

我想做什么

我是here,但问题与我最初的想法不同。

我使用的CMS已经为可排序组设置了选项,我不想更改它们。我想要做的是排除<div> class "not-sortable"的{​​{1}}可排序。

CMS中包含的当前设置

    $('.meta-box-sortables').sortable({
        placeholder: 'sortable-placeholder',
        connectWith: '.meta-box-sortables',
        items: '.postbox',
        handle: '.hndle',
        cursor: 'move',
        delay: ( isMobile ? 200 : 0 ),
        distance: 2,
        tolerance: 'pointer',
        forcePlaceholderSize: true,
        helper: 'clone',
        opacity: 0.65,
    });

如上所述,我已将其中一个'postbox'部分设为'not-sortable'。然后在自定义.js文件中,我有以下内容。

我的自定义设置

jQuery(function($) {
    $(".meta-box-sortables").sortable({
        items : ':not(.not-sortable)'
    });
});

然后删除了移动任何先前可拖动部分的能力。因此,我似乎重写了items:选项。

有没有办法可以在不覆盖原始设置的情况下做到这一点,或者我的思路错误在这里?

1 个答案:

答案 0 :(得分:0)

您可以使用带有对象的option方法的形式:

jQuery(function($) {
    $(".meta-box-sortables").sortable("option", {
        items: ":not(.not-sortable)"
    });
});

这样,您将保留未指定的设置。

详细说明先前存储在item选项中的选择器,您遗憾的是必须再次指定它:

items: ".postbox:not(.not-sortable)"

连接到上一个值是可行的:

items: $(".meta-box-sortables").sortable("option", "items")
    + ":not(.not-sortable)"

如果items包含更复杂的选择器(例如multiple selector),则会失败:

items: ".postbox, .other",  // Whoops.