对嵌套列表进行排序

时间:2014-12-11 07:49:01

标签: javascript jquery sorting

给定是一个嵌套列表,带有以下标记(遗憾的是此时无法更改)。 我想按照' a' -tag标题排序此列表(以及所有嵌套列表。) 第一个div(不是嵌套在' li'中)应该用于对' ul' -sbelings进行排序。

性能也很重要,因为此列表可以轻松包含超过100个项目,但不到我想的1000个。(我不确定这是否会成为性能问题)

<ul>
    <div class="bioResult"><a href="">Test</a></div>
</ul>
<ul>
    <li>
        <ul>
            <div class="bioResult"><a href="">C Departmnet</a></div>
            <li>
                <div class="bioResult"><a href="">C</a></div>
            </li>
        </ul>
    </li>
</ul>

我已经挣扎着完成了嵌套列表排序,但是我无法理解这些排序,因为它没有像我想象的那样工作它可以工作。 :)

查看我的fiddle

此时插件不是一个选项。

1 个答案:

答案 0 :(得分:2)

对所有内容进行排序是按字母顺序将所有节点附加到各自父节点的问题。

function uCase(elem) {
    return $.trim( $(elem).text().toUpperCase() )
}
function compareFirstLink(a, b) {
    var A = uCase( $(a).first('a') ),
        B = uCase( $(b).first('a') );       
    return (A > B) ? 1 : -1;
}
$(function () {
    var $sortables = $("ul:has(div:first-child), li:not(.fixedOrder)");
    $sortables.sort(compareFirstLink).each(function () {
        this.parentNode.appendChild(this);
    });
});