重新排序项目算法

时间:2009-03-18 19:12:20

标签: javascript html reorderlist

我有一个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

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

2 个答案:

答案 0 :(得分:2)

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

  • 获取检查项目的行
  • 获取{top} -most checked item
  • 的索引
  • 删除行&将它们插入{index-1}
  • 的表格中
  • (当然top可能是bottom,index-1更复杂 取决于方向以及我们是否已经处于极端状态)

答案 1 :(得分:0)

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

无视:您想使用Fisher Yates Shuffle algorithm