UI/API/1.7/Sortable

jQuery UI Sortable

概述

jQuery UI Sortable 插件使选中的元素伴随鼠标拖动实现排序.

所有的回调函数接受两个参数: 浏览器事件和ui对象, 此对象请查看下面的文档 :

  • ui.helper - 当前的辅助对象(多数为元素的克隆)
  • ui.position - 当前辅助对象的位置
  • ui.offset - 当前辅助对象的绝对位置
  • ui.item - 当前拖动的元素
  • ui.placeholder - 占位对象(如果有定义的话)
  • ui.sender - 排序对象元素的来源对象(只有当你将一个对象移动到另一个列表时存在)

其他附加文件

  • UI Core

示例

简单的jQuery UI Sortable.

$("#sortable").sortable();

<!DOCTYPE html>
<html>
<head>
  <link type="text/css" href="themes/base/ui.all.css" rel="stylesheet" />
  <script type="text/javascript" src="js/jquery.min.js"></script>
  <script type="text/javascript" src="ui/ui.core.js"></script>
  <script type="text/javascript" src="ui/ui.sortable.js"></script>
  <style type="text/css">
    #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
    #sortable li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; height: 1.5em; }
    html>body #sortable li { height: 1.5em; line-height: 1.2em; }
    .ui-state-highlight { height: 1.5em; line-height: 1.2em; }
  </style>
  <script type="text/javascript">
    $(document).ready(function(){
      $("#sortable").sortable({
        placeholder: 'ui-state-highlight'
      });
      $("#sortable").disableSelection();
    });
  </script>
</head>
<body style="font-size:62.5%;">
  
<ul id="sortable">
  <li class="ui-state-default">Item 1</li>
  <li class="ui-state-default">Item 2</li>
  <li class="ui-state-default">Item 3</li>
  <li class="ui-state-default">Item 4</li>
  <li class="ui-state-default">Item 5</li>
  <li class="ui-state-default">Item 6</li>
  <li class="ui-state-default">Item 7</li>
</ul>

</body>
</html>

参数

  • appendTo

    类型:
    String
    默认值:
    'parent'

    定义可移动的辅助元素在拖动时可以被添加到何处 (例如, 解决重叠/ zIndex问题).

    代码示例

    使用指定的appendTo参数初始化一个sortable.
    $('.selector').sortable({ appendTo: 'body' });
    在初始化后设置或者获取appendTo参数.
    //获取
    var appendTo = $('.selector').sortable('option', 'appendTo');
    //设置
    $('.selector').sortable('option', 'appendTo', 'body');
  • axis

    类型:
    String
    默认值:
    false

    如果定义了该参数, 元素可以在水平或垂直方向或者两者上实现拖动. 允许使用的值:'x', 'y'.

    代码示例

    使用指定的axis参数初始化一个sortable.
    $('.selector').sortable({ axis: 'x' });
    在初始化后设置或者获取axis参数.
    //获取
    var axis = $('.selector').sortable('option', 'axis');
    //设置
    $('.selector').sortable('option', 'axis', 'x');
  • cancel

    类型:
    Selector
    默认值:
    ':input,button'

    对符合选择器匹配规则的元素不进行排序.

    代码示例

    使用指定的cancel参数初始化一个sortable.
    $('.selector').sortable({ cancel: 'button' });
    在初始化后设置或者获取cancel参数.
    //获取
    var cancel = $('.selector').sortable('option', 'cancel');
    //设置
    $('.selector').sortable('option', 'cancel', 'button');
  • connectWith

    类型:
    Selector
    默认值:
    false

    使用jQuery选择器使对象也同时具有接收当前sortables项的能力.如果启用, sortable对象现在连接到另一条途径上, 所以你可以移动他从这个sortable到另一个.

    代码示例

    使用指定的connectWith参数初始化一个sortable.
    $('.selector').sortable({ connectWith: '.otherlist' });
    在初始化后设置或者获取connectWith参数.
    //获取
    var connectWith = $('.selector').sortable('option', 'connectWith');
    //设置
    $('.selector').sortable('option', 'connectWith', '.otherlist');
  • containment

    类型:
    Element, String, Selector
    默认值:
    false

    限制拖动范围在指定的DOM元素内,'parent', 'document', 'window',或者一个jQuery选择器所指定的范围.

    代码示例

    使用指定的containment参数初始化一个sortable.
    $('.selector').sortable({ containment: 'parent' });
    在初始化后设置或者获取containment参数.
    //获取
    var containment = $('.selector').sortable('option', 'containment');
    //设置
    $('.selector').sortable('option', 'containment', 'parent');
  • cursor

    类型:
    String
    默认值:
    'auto'

    定义排序拖动时的鼠标指针样式.

    代码示例

    使用指定的cursor参数初始化一个sortable.
    $('.selector').sortable({ cursor: 'crosshair' });
    在初始化后设置或者获取cursor参数.
    //获取
    var cursor = $('.selector').sortable('option', 'cursor');
    //设置
    $('.selector').sortable('option', 'cursor', 'crosshair');
  • cursorAt

    类型:
    Object
    默认值:
    false

    拖动排序对象时鼠标指针始终在同一个指定位置. 坐标可使用散列或者相结合的一个或两个键值: { top, left, right, bottom }.

    代码示例

    使用指定的cursorAt参数初始化一个sortable.
    $('.selector').sortable({ cursorAt: 'top' });
    在初始化后设置或者获取cursorAt参数.
    //获取
    var cursorAt = $('.selector').sortable('option', 'cursorAt');
    //设置
    $('.selector').sortable('option', 'cursorAt', 'top');
  • delay

    类型:
    Integer
    默认值:
    0

    在排序拖动开始多少毫秒后元素才开始移动. 这可以防止意外的点击造成元素的拖动.

    代码示例

    使用指定的delay参数初始化一个sortable.
    $('.selector').sortable({ delay: 500 });
    在初始化后设置或者获取delay参数.
    //获取
    var delay = $('.selector').sortable('option', 'delay');
    //设置
    $('.selector').sortable('option', 'delay', 500);
  • distance

    类型:
    Integer
    默认值:
    1

    设置当排序拖动开始多少个像素之后元素才开始移动. 如果指定了该参数, 排序不会马上开始,知道鼠标移动达到了指定的像素值.

    代码示例

    使用指定的distance参数初始化一个sortable.
    $('.selector').sortable({ distance: 30 });
    在初始化后设置或者获取distance参数.
    //获取
    var distance = $('.selector').sortable('option', 'distance');
    //设置
    $('.selector').sortable('option', 'distance', 30);
  • dropOnEmpty

    类型:
    Boolean
    默认值:
    true

    如果为空允许从一个链接的selectable中的元素进行填充.

    代码示例

    使用指定的dropOnEmpty参数初始化一个sortable.
    $('.selector').sortable({ dropOnEmpty: false });
    在初始化后设置或者获取dropOnEmpty参数.
    //获取
    var dropOnEmpty = $('.selector').sortable('option', 'dropOnEmpty');
    //设置
    $('.selector').sortable('option', 'dropOnEmpty', false);
  • forceHelperSize

    类型:
    Boolean
    默认值:
    false

    如果为真, 强迫辅助对象有一个大小.

    代码示例

    使用指定的forceHelperSize参数初始化一个sortable.
    $('.selector').sortable({ forceHelperSize: true });
    在初始化后设置或者获取forceHelperSize参数.
    //获取
    var forceHelperSize = $('.selector').sortable('option', 'forceHelperSize');
    //设置
    $('.selector').sortable('option', 'forceHelperSize', true);
  • forcePlaceholderSize

    类型:
    Boolean
    默认值:
    false

    如果为真, 强迫占位符有一个大小.

    代码示例

    使用指定的forcePlaceholderSize参数初始化一个sortable.
    $('.selector').sortable({ forcePlaceholderSize: true });
    在初始化后设置或者获取forcePlaceholderSize参数.
    //获取
    var forcePlaceholderSize = $('.selector').sortable('option', 'forcePlaceholderSize');
    //设置
    $('.selector').sortable('option', 'forcePlaceholderSize', true);
  • grid

    类型:
    Array
    默认值:
    false

    设置排序对象或者辅助对象有一个x和y边距,(单位:像素). 数组值: [x, y]

    代码示例

    使用指定的grid参数初始化一个sortable.
    $('.selector').sortable({ grid: [50, 20] });
    在初始化后设置或者获取grid参数.
    //获取
    var grid = $('.selector').sortable('option', 'grid');
    //设置
    $('.selector').sortable('option', 'grid', [50, 20]);
  • handle

    类型:
    Selector, Element
    默认值:
    false

    如果设定了此参数,那么拖动会在对象内指定的元素上开始.

    代码示例

    使用指定的handle参数初始化一个sortable.
    $('.selector').sortable({ handle: 'h2' });
    在初始化后设置或者获取handle参数.
    //获取
    var handle = $('.selector').sortable('option', 'handle');
    //设置
    $('.selector').sortable('option', 'handle', 'h2');
  • helper

    类型:
    String, Function
    默认值:
    'original'

    允许使用一个辅助元素来进行拖动时展示. 所提供的函数在拖动时接受事件和对象元素, 并且需要返回一个DOMElement对象用来当作辅助对象. 允许使用的值: 'original', 'clone'

    代码示例

    使用指定的helper参数初始化一个sortable.
    $('.selector').sortable({ helper: 'clone' });
    在初始化后设置或者获取helper参数.
    //获取
    var helper = $('.selector').sortable('option', 'helper');
    //设置
    $('.selector').sortable('option', 'helper', 'clone');
  • items

    类型:
    Selector
    默认值:
    '> *'

    指定对象中的哪些元素可以用来排序.

    代码示例

    使用指定的items参数初始化一个sortable.
    $('.selector').sortable({ items: 'li' });
    在初始化后设置或者获取items参数.
    //获取
    var items = $('.selector').sortable('option', 'items');
    //设置
    $('.selector').sortable('option', 'items', 'li');
  • opacity

    类型:
    Float
    默认值:
    false

    定义拖动时辅助对象的不透明度. 范围: 0.01 ~ 1

    代码示例

    使用指定的opacity参数初始化一个sortable.
    $('.selector').sortable({ opacity: 0.6 });
    在初始化后设置或者获取opacity参数.
    //获取
    var opacity = $('.selector').sortable('option', 'opacity');
    //设置
    $('.selector').sortable('option', 'opacity', 0.6);
  • placeholder

    类型:
    String
    默认值:
    false

    设置添加处的样式,否则使用空白.

    代码示例

    使用指定的placeholder参数初始化一个sortable.
    $('.selector').sortable({ placeholder: '.ui-state-highlight' });
    在初始化后设置或者获取placeholder参数.
    //获取
    var placeholder = $('.selector').sortable('option', 'placeholder');
    //设置
    $('.selector').sortable('option', 'placeholder', '.ui-state-highlight');
  • revert

    类型:
    Boolean
    默认值:
    false

    如果设置为true, 元素在回到它在DOM中的新位置时将执行一段动画.

    代码示例

    使用指定的revert参数初始化一个sortable.
    $('.selector').sortable({ revert: true });
    在初始化后设置或者获取revert参数.
    //获取
    var revert = $('.selector').sortable('option', 'revert');
    //设置
    $('.selector').sortable('option', 'revert', true);
  • scroll

    类型:
    Boolean
    默认值:
    true

    如果设置为true, 页面会在事件到大窗体边缘时滚动.

    代码示例

    使用指定的scroll参数初始化一个sortable.
    $('.selector').sortable({ scroll: false });
    在初始化后设置或者获取scroll参数.
    //获取
    var scroll = $('.selector').sortable('option', 'scroll');
    //设置
    $('.selector').sortable('option', 'scroll', false);
  • scrollSensitivity

    类型:
    Integer
    默认值:
    20

    定义当鼠标距离窗体边缘多近时开始执行滚动.

    代码示例

    使用指定的scrollSensitivity参数初始化一个sortable.
    $('.selector').sortable({ scrollSensitivity: 40 });
    在初始化后设置或者获取scrollSensitivity参数.
    //获取
    var scrollSensitivity = $('.selector').sortable('option', 'scrollSensitivity');
    //设置
    $('.selector').sortable('option', 'scrollSensitivity', 40);
  • scrollSpeed

    类型:
    Integer
    默认值:
    20

    定义当鼠标满足scrollSensitivity窗体需要执行滚动时的滚动速度.

    代码示例

    使用指定的scrollSpeed参数初始化一个sortable.
    $('.selector').sortable({ scrollSpeed: 40 });
    在初始化后设置或者获取scrollSpeed参数.
    //获取
    var scrollSpeed = $('.selector').sortable('option', 'scrollSpeed');
    //设置
    $('.selector').sortable('option', 'scrollSpeed', 40);
  • tolerance

    类型:
    String
    默认值:
    'intersect'

    这是在拖动时重新排序的方式. 允许使用的值: 'intersect', 'pointer'. 在一些设置中, 'pointer' 是自然的.

    代码示例

    使用指定的tolerance参数初始化一个sortable.
    $('.selector').sortable({ tolerance: 'pointer' });
    在初始化后设置或者获取tolerance参数.
    //获取
    var tolerance = $('.selector').sortable('option', 'tolerance');
    //设置
    $('.selector').sortable('option', 'tolerance', 'pointer');
  • zIndex

    类型:
    Integer
    默认值:
    1000

    元素/辅助对象在拖动时的Z-index值.

    代码示例

    使用指定的zIndex参数初始化一个sortable.
    $('.selector').sortable({ zIndex: 5 });
    在初始化后设置或者获取zIndex参数.
    //获取
    var zIndex = $('.selector').sortable('option', 'zIndex');
    //设置
    $('.selector').sortable('option', 'zIndex', 5);

事件

  • start

    类型:
    sortstart

    这个事件在排序开始时触发.

    代码示例

    提供一个回调函数对start事件进行操作.
    $('.selector').sortable({
       start: function(event, ui) { ... }
    });
    使用sortstart类型来绑定start事件.
    $('.selector').bind('sortstart', function(event, ui) {
      ...
    });
  • sort

    类型:
    sort

    这个事件在排序时触发.

    代码示例

    提供一个回调函数对sort事件进行操作.
    $('.selector').sortable({
       sort: function(event, ui) { ... }
    });
    使用sort类型来绑定sort事件.
    $('.selector').bind('sort', function(event, ui) {
      ...
    });
  • change

    类型:
    sortchange

    这个事件在排序时触发,但是仅仅在对象在DOM中的位置改变时才会触发.

    代码示例

    提供一个回调函数对change事件进行操作.
    $('.selector').sortable({
       change: function(event, ui) { ... }
    });
    使用sortchange类型来绑定change事件.
    $('.selector').bind('sortchange', function(event, ui) {
      ...
    });
  • beforeStop

    类型:
    sortbeforeStop

    这个事件在排序停止时触犯,但仅仅在placeholder/helper依然存在时触发.

    代码示例

    提供一个回调函数对beforeStop事件进行操作.
    $('.selector').sortable({
       beforeStop: function(event, ui) { ... }
    });
    使用sortbeforeStop类型来绑定beforeStop事件.
    $('.selector').bind('sortbeforeStop', function(event, ui) {
      ...
    });
  • stop

    类型:
    sortstop

    这个事件在排序停止时触发.

    代码示例

    提供一个回调函数对stop事件进行操作.
    $('.selector').sortable({
       stop: function(event, ui) { ... }
    });
    使用sortstop类型来绑定stop事件.
    $('.selector').bind('sortstop', function(event, ui) {
      ...
    });
  • update

    类型:
    sortupdate

    这个事件在用户停止排序并且DOM节点位置发生改变时出发.

    代码示例

    提供一个回调函数对update事件进行操作.
    $('.selector').sortable({
       update: function(event, ui) { ... }
    });
    使用sortupdate类型来绑定update事件.
    $('.selector').bind('sortupdate', function(event, ui) {
      ...
    });
  • receive

    类型:
    sortreceive

    这个时间在一个已连接的sortable接收到来自另一个列表的元素时触发.

    代码示例

    提供一个回调函数对receive事件进行操作.
    $('.selector').sortable({
       receive: function(event, ui) { ... }
    });
    使用sortreceive类型来绑定receive事件.
    $('.selector').bind('sortreceive', function(event, ui) {
      ...
    });
  • remove

    类型:
    sortremove

    这个事件在sortable中的元素移除自身列表添加到另一个列表时触发.

    代码示例

    提供一个回调函数对remove事件进行操作.
    $('.selector').sortable({
       remove: function(event, ui) { ... }
    });
    使用sortremove类型来绑定remove事件.
    $('.selector').bind('sortremove', function(event, ui) {
      ...
    });
  • over

    类型:
    sortover

    这个事件在一个元素添加到连接列表中时触发.

    代码示例

    提供一个回调函数对over事件进行操作.
    $('.selector').sortable({
       over: function(event, ui) { ... }
    });
    使用sortover类型来绑定over事件.
    $('.selector').bind('sortover', function(event, ui) {
      ...
    });
  • out

    类型:
    sortout

    这个事件在一个元素移除连接列表时触发.

    代码示例

    提供一个回调函数对out事件进行操作.
    $('.selector').sortable({
       out: function(event, ui) { ... }
    });
    使用sortout类型来绑定out事件.
    $('.selector').bind('sortout', function(event, ui) {
      ...
    });
  • activate

    类型:
    sortactivate

    这个事件发生在使用连接列表,每个连接列表在拖动开始准备接受它时触发.

    代码示例

    提供一个回调函数对activate事件进行操作.
    $('.selector').sortable({
       activate: function(event, ui) { ... }
    });
    使用sortactivate类型来绑定activate事件.
    $('.selector').bind('sortactivate', function(event, ui) {
      ...
    });
  • deactivate

    类型:
    sortdeactivate

    这个事件发生在排序结束后,传播到所有可能的连接列表.

    代码示例

    提供一个回调函数对deactivate事件进行操作.
    $('.selector').sortable({
       deactivate: function(event, ui) { ... }
    });
    使用sortdeactivate类型来绑定deactivate事件.
    $('.selector').bind('sortdeactivate', function(event, ui) {
      ...
    });

方法

  • destroy

    方法签名:
    .sortable( 'destroy' )

    完全移除排序功能. 这将使元素返回到之前的初始化状态.

  • disable

    方法签名:
    .sortable( 'disable' )

    关闭排序功能.

  • enable

    方法签名:
    .sortable( 'enable' )

    打开排序功能.

  • option

    方法签名:
    .sortable( 'option', optionName , [value] )

    获取或者设置sortable参数. 如果没有提供参数值则是获取.

  • serialize

    方法签名:
    .sortable( 'serialize' , [options] )

    序列化一个sortable成为一个form/ajax提交字符串. 调用此方法生产的序列,可以附加到任何URL ,以轻松提交一个新的项目,以便回传到服务器.

    它的工作原理是默认情况下使用每个项目排序ID使用' setname_number '进行格式化,它吐出了类似"setname[]=number&setname[]=number"这样的散列.

    您也可以给一个选择散列作为第二个参数,以确定如何实现自定义的功能.允许的选择是:'key' (取代part1[]无论你是否想这样), 'attribute' (测试另一个属性'id' )和 'expression'(使用您自己的regexp).

    如果序列返回一个空字符串,请确保编号属性包括下划线. 他们必须符合以下格式: "set_number"例如, 一个有3个元素的列表使用id和attributes foo_1, foo_5, foo_2 会被序列化为 foo[]=1&foo[]=5&foo[]=2. 你可以使用下划线, 等号或者连字符去分隔set和number. 例如 foo=1 或者 foo-1 或者 foo_1 都序列化为 foo[]=1.

  • toArray

    方法签名:
    .sortable( 'toArray' )

    使sortable的项目序列化一个字符串数组. 如果你有一个

    <ul id="a_sortable"><br>
    <li id="hello">Hello</li><br>
    <li id="goodbye">Good bye</li><br>
    </ul>
    

    并且执行

    var result = $('#a_sortable').sortable('toArray');

    那么

    result[0] 则包含 "hello" ,result[1] 则包含 "goodbye".

  • refresh

    方法签名:
    .sortable( 'refresh' )

    刷新sortable项目. 自定义触发所有sortable项目的重新加载, 以使新项目得到承认.

  • refreshPositions

    方法签名:
    .sortable( 'refreshPositions' )

    刷新缓存中的sortable项目的位置. 调用此方法将刷新所有缓存中sortable项目的位置. 这通常是脚本自动完成的并且会降低性能. 请慎重使用.

  • cancel

    方法签名:
    .sortable( 'cancel' )

    取消当前sortable中的一个变更并且将该元素恢复到它上一次所在的位置.在结束和接收回调中很有用.

    如果排序元素不是从连接列表中的一个移动到另一个:

    $(this).sortable('cancel');

    便可取消变更.

    如果排序元素是从连接列表中的一个移动到另一个:

    $(ui.sender).sortable('cancel');

    便可取消变更. 在'receive'回调中很有用.

主题

jQuery UI Sortable插件使用jQuery UI CSS 框架的外观和风格,包括颜色和背景纹理.我们建议您使用ThemeRoller工具来创建和下载的自定义主题,很容易建立和维护.

如果有更深层次的个性化需要,有特定类别的工具ui.sortable.css样式可供参考,可以修改这些参考。这些课程是下面以高亮和粗体显示的。

jQuery UI CSS Framework classes示例

<ul class="ui-sortable">
   <li></li>
   <li></li>
   <li></li>
</ul>

Note: 注:这是一个示例sortable插件所产生的标记,而不是你应该使用的标记.创建一个sortable唯一需要的标记是
<ul>
   <li></li>
   <li></li>
   <li></li>
</ul>.