2

因此,我有一个 html 表:

up | dn
[ ]  Item 1
[x]  Item 2
[ ]  Item 3
[ ]  Item 4
[x]  Item 5
[ ]  Item 6
[ ]  Item 7

如果选中 2 & 5 并单击向上,结果是:

up | dn
[x]  Item 2
[x]  Item 5
[ ]  Item 1
[ ]  Item 3
[ ]  Item 4
[ ]  Item 6
[ ]  Item 7

如果我点击 dn,结果是:

up | dn
[ ]  Item 1
[ ]  Item 3
[ ]  Item 4
[ ]  Item 6
[x]  Item 2
[x]  Item 5
[ ]  Item 7

换句话说,项目按所选方向分组,然后沿该方向移动一行。有人有一个很好的算法吗?我确信我可以毫不费力地写一些东西,但它似乎应该是“在那里”的那种东西......

4

2 回答 2

2

我认为我倾向于使用剪切和粘贴的方法,因为 js 框架使得移动 DOM 片段相对容易。

  • 获取检查项目的行
  • 获取 {top} 最多检查项目的索引
  • 删除行并将它们插入到 {index-1} 的表中
  • (当然顶部可能是底部,并且 index-1 更复杂,具体取决于方向以及我们是否已经处于极端)
于 2009-03-18T19:29:48.413 回答
0

这看起来像是一个多键排序任务。您可以使用jQuery UI 的 Sortable界面之类的东西。您的排序条件类似于:a.selected <=> b.selected && a.index <=> b.index。

忽略:您想使用Fisher Yates Shuffle algorithm

于 2009-03-18T19:21:10.553 回答