如何在Javascript中对复杂列表进行排序?

时间:2016-08-29 09:10:50

标签: javascript html sorting

我暂时搁置了这个问题。我有一个嵌套列表,其结构看起来像

Volume1
    Chapter4
    Chapter3
        Section3-6
        Section3-1
Volume2...
...

我想要的是创建一个排序函数来对音量,章节和节进行排序。

所以,结果可能就像

Volume1
    Chapter1
        Section1-1
....

所以我得到了一个复杂的html,这里是whole html。 我不确定如何交换此复杂div 我试图获取元素并将它们放入数组中。

var toSort = document.getElementById('volume5015').children;
toSort = Array.prototype.slice.call(toSort, 0); 

1 个答案:

答案 0 :(得分:0)

我为你做了一个小提琴。

在我的代码中,我正在修剪文本的空白,所以不要进行比较,但如果你不想要,你实际上并不需要。

var $items = $("#to-sort").children();
var $resultList = $("#list2");

sortMarkup($items, $resultList);

function sortMarkup($elements, $output) {
  $elements.sort(function(a, b) {
    var contentA = getPureText(a).trim();
    var contentB = getPureText(b).trim();
    var okay = contentA.toUpperCase().localeCompare(contentB.toUpperCase());

    if( $(a).children().length > 0 )
        sortMarkup( $(a).children(), $(a) );

    if( $(b).children().length > 0 )
        sortMarkup( $(b).children(), $(b) );

    console.log("sorting ["+contentA+"] and ["+contentB+"] returned "+okay);
    return okay;
  });

  $output.append($elements);
}

function getPureText(elem) {
    return $(elem).contents().filter(function() { 
    return this.nodeType == 3; 
    })[0].nodeValue;
}

另外,我正在使用输出列表,另一件不需要的东西。随意修改您的需求!

小提琴https://jsfiddle.net/vincelord/sn42argq/