Как отсортировать данные XML в порядке? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть набор элементов списка, которые я хотел бы автоматически отображать от высокого до низкого при загрузке страницы.В идеале, используя jquery или javascript.

Вот мой код.

data.xml

<cd>
  <presantage>10%</presantage>
</cd>
<cd> 
  <presantage>50%</presantage>
</cd>
<cd>
  <presantage>5%</presantage>
</cd>

Для отображения данных XML

$(document).ready(function(){
    $.ajax({
        type:"GET",
        url:"data.xml",
        dataType:"xml",
        success:xmlParser2
    });
   });
   function xmlParser2(xml){
    xml = $(xml).children();
    $(xml).children().each(function () {

       let tag = $(this).prop("tagName");
        let presantage = '<div>' + $(this).find("presantage").text() + '</div>';

        let html = '<li>'+ (presantage)+'</li>';

            $(".list").append(html);
    });
}

Для элементов заказа

var ul = $(".list:first");
var arr = $.makeArray(ul.children("li"));

arr.sort(function(a, b) {
    var textA = +$(a).text();
    var textB = +$(b).text();

    if (textA < textB) return -1;
    if (textA > textB) return 1;

    return 0;
});

ul.empty();

$.each(arr, function() {
    ul.append(this);
});

html

<ul class="list"></ul>

Плункер

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Это простой JS (чистый) код для получения процентов, отсортированных в порядке убывания.

var doc = new DOMParser().parseFromString(xml, "application/xml");
var elements = doc.getElementsByTagName('presantage');
var percentages = [];
for (let i = 0; i < elements.length; i++) {
    percentages.push(parseFloat(elements[i].textContent));
}
percentages.sort((a, b) => b - a); // array [50, 10, 5]

После этого вы можете отсортировать цикл по percentages и создать список html.

Примечание: если вам нужно отсортировать в порядке возрастания, вы должны сделать a - b.

0 голосов
/ 18 октября 2018

Попробуйте это:

 function xmlParser2(xml){
   var obj = {};

xml = $(xml).children();
$(xml).children().each(function () {

    obj[$(this).find("presantage").text().replace('%', '')]  = $(this).find("presantage").text();




});

for(var k in obj ){
    let html = '<li>'+ (obj[k])+'</li>';

    $(".list").append(html);
}

// alert(JSON.stringify(obj)) 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...