2012-05-28 89 views
1

拖/放多个后,我想要取消选项,以便所有div在按下时恢复到原始状态和位置。恢复到以前的状态 - 拖放

HTML:

<div class="connected"> 
    <div class="myDivs">Hello 01</div> 
    <div class="myDivs">Hello 02</div> 
    <div class="myDivs excludeThisCss">Hello 03</div> 
    <div class="myDivs">Hello 04</div> 
    <div class="myDivs">Hello 05</div> 
    <div class="myDivs excludeThisCss">Hello 06</div> 
    <div class="myDivs">Hello 07</div> 
    <div class="myDivs">Hello 08</div> 
    <div class="myDivs excludeThisCss">Hello 09</div> 
    <div class="myDivs">Hello 10</div> 
</div> 
<button id="demo1" onclick="cancel()" title="Button">Cancel</button> 

的JavaScript:

$(function() { 
    $(".connected").sortable({ 
     connectWith: ".connected", 
     items: ".myDivs:not(.excludeThisCss)" 
    }).disableSelection(); 
}); 

function cancel() { 
    // alert('cancelled'); 
}​ 

见琴:http://jsfiddle.net/adrianjsfiddlenetuser/zyUkd/6/

我见过使用.load函数的例子,但我不知道想要加载新数据,只需刷新div

回答

3

还有另一种更轻量级的解决方案。

首先,在DOM ready上,我们将初始索引存储到每个元素的data

$(".connected").sortable({ 
    ... 
}).children().each(function(index) { 
    $(this).data("index", index); 
}); 

然后,在取消,让我们恢复基于存储索引元素的位置如下:

function cancel() { 
    var indices = []; 
    $(".connected").children().each(function() { 
     indices.push($(this).data("index")); 
    }).each(function(index) { 
     var el = $(".connected").children().eq(indices[index]); 
     if (!el.is(this)) el.before(this); 
    }); 
}​ 

DEMO:http://jsfiddle.net/zyUkd/13/

+0

好的工作。为什么我不能想到这一点? –

+0

@tpaksu谢谢!我的+1在哪里? :D嗯,这是我想起来的第一个想法... – VisioN

+1

这是它。 :)我懒得为它编写代码,但你成功了。恭喜。 –

0

我会建议保存初始容器元素的.data()集合与密钥"initial-container",并在恢复,.detach().append()它的.data("initial-container")

1

我能够解决这个问题,把你的容器内的元素放入一个变量中,然后当你按'取消'时删除/加载容器中的变量数据。它会将它重置为原始列表位置,前提是您将它​​保存在变量中。

http://jsfiddle.net/zyUkd/12/

+0

它仅取消最后的修改。 – VisioN

+0

新的编辑工作正常。 –

1

这里去好ol办法:

声明一个全局变量来存储元素的初始顺序。 var def;

在您$(document).ready(),这就是,$(function(){}),在初始顺序的元素存储:

def = $('.connected').html(); 

最后,您cancel()功能,要素恢复到初始顺序:

$('.connected').html(def); 

JSFiddle

这是3行代码而且shouldn花费太多内存来存储几个DOM元素。

您也可以将$('.connected')元素备份到var中,从文档中移除当前元素并将var中的原始元素附加到页面的body/container div中。

通过API documentation查看,.sortable("destroy")方法应该将可排序项目返回到其初始顺序,但是当我使用示例尝试时,destroy方法不起作用。