我有一个包含列的表:
我有一些代码按艺术家对表行进行排序。
function sortAsc(a, b) {
var aText=$(a).find('.artist').text();
var bText=$(b).find('.artist').text();
return aText==bText?0:aText<bText?-1:1;
}
function sortTheTable(){
$(function() {
elems=$.makeArray($('tr:has(.artist)'));
elems.sort(sortAsc);
$('#songs').append(elems);
});
}
window.onload = function() {
document.getElementById("artistsort").onclick = function() {
sortTheTable();
}
}
以下是我用来测试它的一些HTML:
<table class="table" style="table-layout:fixed">
<thead>
<tr>
<th><a href="#" id="artistsort">Artist/Band:</a></th><th>Song:</th>
<th>Album:</th>
<th style="padding-left:6%">Add to Playlist</th>
</tr>
</thead>
</table>
<table id="songs" class="table table-hover" style="table-layout:fixed">
<form action="">
<tr>
<td class="artist">Capital Cities</td><td class="songtitle">Safe and Sound</td><td>In a Tidal Wave of Mystery</td>
<td style="text-align:center"><input type="checkbox" name="addsong" value=""></td>
</tr>
<tr>
<td class="artist">Capital Cities</td><td class="songtitle">Kangaroo Court</td><td>In a Tidal Wave of Mystery</td>
<td style="text-align:center"><input type="checkbox" name="addsong" value=""></td>
</tr>
<tr>
<td class="artist">Two Door Cinema Club</td><td class="songtitle">Remember My Name</td><td>Beacon</td>
<td style="text-align:center"><input type="checkbox" name="addsong" value=""></td>
</tr>
<tr>
<td class="artist">Anamanaguchi</td><td class="songtitle">Blackout City</td><td>Dawn Metropolis</td>
<td style="text-align:center"><input type="checkbox" name="addsong" value=""></td>
</tr>
</form>
</table>
最终发生的事情是它按照预期按艺术家对行进行排序,但每次“艺术家/乐队:”被点击时,同一艺术家的歌曲顺序会混淆。
我不想要一个涉及插件的解决方案,我可以自己找到很多这样的插件。
我只是想知道这里发生了什么。
答案 0 :(得分:1)
欢迎排序算法的细微之处。正如我的评论中所述,您要求的是所谓的稳定排序算法。但sort()
的浏览器实现并不需要稳定。有些是;有些人不是。为了可靠地解决您的问题,您必须使用自己的排序算法而不是内置算法。此问题中的更多信息:Fast stable sorting algorithm implementation in javascript