根据数字排序顺序更新自动重新排列HTML列表
Automatically re-arrange HTML list base on numeric sort order updates
我正在构建一个有排名列表的页面。列表中的项目与等级顺序编号相关联。随着用户在页面上的其他位置做出不同的选择,列表中每个项目的订单号都会发生变化。我一直在四处寻找,看看是否有一种方法可以在列表项目的排名顺序发生变化时自动重新排列它们。我看了一些JQuery.sort()示例,这些示例需要重新构建DOM元素,而且我似乎可以使用这些方法应用任何动画。我还研究了JQueryUI的可排序性,但它似乎只允许通过拖放进行排序。我真的在寻找类似同位素分类的东西。然而,由于许可问题,我无法利用该框架。为了增加挑战,每个列表项都将包含可折叠的部分,因此它们的大小不会固定。
我最初设想的是这样的东西:
Initial HTML:
<ul class="sortedlist">
<li class="1">A</li>
<li class="2">B</li>
<li class="3">C</li>
<li class="4">D</li>
<li class="5">E</li>
</ul>
Browser:
---
A
---
B
---
C
---
D
---
E
---
Updated HTML:
<ul class="sortedlist">
<li class="4">A</li>
<li class="1">B</li>
<li class="5">C</li>
<li class="2">D</li>
<li class="3">E</li>
</ul>
Updated Browser:
---
B
---
D
---
E
---
A
---
C
---
欢迎提出任何建议或举例。谢谢
如果您想对它们进行排序。这可以通过CSS属性"disply: flex
"进行管理。试试这个
ul {display: flex; flex-direction: column;}
这会使列表项垂直向下。-使用flex后,可以使用order
属性。
ul > li:nth-child(0) {order: 2;}
order: 0
是默认值
新答案
对不起,我没有仔细阅读你的问题。这是另一种简单的方法,它移动具有绝对位置和页边空白顶部的项目,但这些项目在列表容器之外,所以这并不理想。
function sortList() {
var list = document.getElementById("listToSort");
var item = list.firstElementChild;
while(item) {
item.style.marginTop = ((parseFloat(item.className) - 1) * 20) + "px";
item = item.nextElementSibling;
}
}
sortList();
// Testing example below
var item1 = document.getElementById("listToSort").getElementsByClassName("1")[0];
var item2 = document.getElementById("listToSort").getElementsByClassName("2")[0];
item1.className = "2";
item2.className = "1";
setTimeout(function() {sortList();},1500);
#listToSort>li {
position: absolute;
-webkit-transition: all 0.7s ease-out;
-moz-transition: all 0.7s ease-out;
-ms-transition: all 0.7s ease-out;
-o-transition: all 0.7s ease-out;
transition: all 0.7s ease-out;
}
<ul id="listToSort" class="sortedlist">
<li class="4">A</li>
<li class="1">B</li>
<li class="5">C</li>
<li class="2">D</li>
<li class="3">E</li>
</ul>
原始答案
这里有一个javascript解决方案,它通过将得分最低的项目移动到最后,然后移动到得分第二低的项目等,迭代所有列表项目,直到它们按顺序排列。
function sortList() {
var list = document.getElementById("listToSort");
var listItem = list.firstChild;
var currentScore = 1;
while (true) {
if (listItem.className == currentScore) {
currentScore++;
list.appendChild(listItem);
listItem = list.firstChild;
} else if (listItem.nextSibling) listItem = listItem.nextSibling;
else break;
}
}
sortList();
<ul id="listToSort" class="sortedlist">
<li class="4">A</li>
<li class="1">B</li>
<li class="5">C</li>
<li class="2">D</li>
<li class="3">E</li>
</ul>
相关文章:
- 如何删除多行HTML排列中的空白
- 重新排列HTML元素的顺序并更改内容
- 如何使用排列运算符来获取具有命名参数的函数的所有参数
- 从数组中删除重复条目,并在javascript中按顺序排列
- 使用CSS从下到上排列元素
- 我可以't在Divs中获得3个twitter小部件,以便并排排列
- Javascript从数组中随机选择并按字母顺序排列
- 如何在php中按元素按字母顺序排列json文件
- Javascript/jQuery:如何从数组的项中获取排列
- 如何在方向更改时重新调整/排列布局(Apache Cordova)
- 有没有比在本例中使用matchMedia更聪明的方法来重新排列页面元素
- 如何根据 js 中每个单词的第 n 个字母按字母顺序排列列表
- 响应式列表,可在浏览器缩小时重新排列
- Javascript将生日按数组顺序排列
- 比较两个JSON数组并重新排列新的JSON数组格式
- 允许用户在HTML页面上重新排列排列的图像
- 阵列排列排列
- Javascript为jquery选择器重新排列数组
- 砌体重新排列,同时仍然调整大小
- 允许用户重新排列 Django 管理站点中的条目,以及如何存储新的自定义顺序以在页面刷新中幸存下来