表格没有完全正确排序

时间:2014-03-23 21:27:43

标签: javascript jquery html

我有一个包含列的表:

  • 艺术家
  • 歌曲标题
  • 相册
  • 添加到播放列表

我有一些代码按艺术家对表行进行排序。

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>

最终发生的事情是它按照预期按艺术家对行进行排序,但每次“艺术家/乐队:”被点击时,同一艺术家的歌曲顺序会混淆。

我不想要一个涉及插件的解决方案,我可以自己找到很多这样的插件。

我只是想知道这里发生了什么。

1 个答案:

答案 0 :(得分:1)

欢迎排序算法的细微之处。正如我的评论中所述,您要求的是所谓的稳定排序算法。但sort()的浏览器实现并不需要稳定。有些是;有些人不是。为了可靠地解决您的问题,您必须使用自己的排序算法而不是内置算法。此问题中的更多信息:Fast stable sorting algorithm implementation in javascript