Reputation: 119
I have a set of the list items that I would like to automatically display from high to low on page load. Ideally using jquery or javascript.
Here is my code.
data.xml
<cd>
<presantage>10%</presantage>
</cd>
<cd>
<presantage>50%</presantage>
</cd>
<cd>
<presantage>5%</presantage>
</cd>
For display xml data
$(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);
});
}
For order elements
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>
Upvotes: 0
Views: 1546
Reputation: 5117
This is a simple JS (pure) code to get percentages sorted in desc order.
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]
After this you can sort loop over percentages
and create your list html.
Note: if you need to sort in ascending order you would do a - b
.
Upvotes: 0
Reputation: 405
Try this:
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))
}
Upvotes: 2