我正在尝试根据每个LI中跨度中的数字对LI列表进行排序。我看过可以做到这一点的插件,但这不是我想要的。
有人可以告诉我你如何对我上面所述的简单列表进行排序吗?我真的不知道从哪里开始,我不知道它是复杂还是简单。
这是我的代码:
ul {
width: 200px;
background-color: #252525;
padding: 10px;
}
li {
background-color: #353535;
margin: 10px;
padding: 5px;
color: #fff;
}
li span {
float: right;
}
<ul>
<li> Cups
<span>12</span>
</li>
<li> Plates
<span>18</span>
</li>
<li> Forks
<span>03</span>
</li>
<li> Knives
<span>06</span>
</li>
<li> Bowls
<span>08</span>
</li>
</ul>
答案 0 :(得分:6)
以下是您应该使用的内容:
function sortEm(a, b) {
return parseInt($('span', a).text()) < parseInt($('span', b).text()) ? 1 : -1;
}
$('li').sort(sortEm).prependTo($('ul#test'));
ul {
width: 200px;
background-color: #252525;
padding: 10px;
}
li {
background-color: #353535;
margin: 10px;
padding: 5px;
color: #fff;
}
li span {
float: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="test">
<li> Cups
<span>12</span>
</li>
<li> Plates
<span>18</span>
</li>
<li> Forks
<span>03</span>
</li>
<li> Knives
<span>06</span>
</li>
<li> Bowls
<span>08</span>
</li>
</ul>
答案 1 :(得分:3)
您应该使用所有<li>
元素填充数组,使用sort()
对此数组进行排序,然后empty()
列表添加append()
已排序的元素。
这样的事情:
$("#doSort").click(function() {
// store the li items
var items = $('ul li').get();
items.sort(function(a, b) {
var valueA = $(a).find("span").text();
var valueB = $(b).find("span").text();
if (valueA < valueB) return -1;
if (valueA > valueB) return 1;
return 0;
});
// clear the list and re-add sorted items on button click
$("ul").empty().append(items);
});
ul {
width: 200px;
background-color: #252525;
padding: 10px;
}
li {
background-color: #353535;
margin: 10px;
padding: 5px;
color: #fff;
}
li span {
float: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li> Cups
<span>12</span>
</li>
<li> Plates
<span>18</span>
</li>
<li> Forks
<span>03</span>
</li>
<li> Knives
<span>06</span>
</li>
<li> Bowls
<span>08</span>
</li>
</ul>
<button id="doSort">Sort this list!</button>