排序 XML 不是 return 值

Sorting XML doesn't return a value

我所做的是解析 var a,排序然后显示它。它没有 return 值或错误。

var a = '<root><ap by="A" on="2021/10/01 14:03:24" lvl="4"></ap><ap by="A" on="2021/10/01 14:03:59" lvl="2"></ap><ap by="A" on="2021/10/01 14:04:01" lvl="5"></ap><ap by="A" on="2021/10/01 14:04:05" lvl="1"></ap></root>';


        $($.parseXML(a), function (log) {
        var ap = $(log).find($(this)).clone();

        ap.sort(function (a, b) {
            return (parseInt($(a).attr("lvl")) - parseInt($(b).attr("lvl")));
        });

        ap.find("ap").each(function () {
        var ap = $(this);
        var by = ap.attr("by");
        var on = kendo.parseDate(ap.attr("on"));
        var lvl = parseInt(ap.attr("lvl"));

                 
        if (apdate.html() != "") $("<br>").appendTo(apdate);
        $("<span" + props + ">").text(by + " (" + kendo.toString(on, User.datetimeFormat) + ") (" + lvl + ")").appendTo(apdate);

        });

我可以使用它显示未排序的数据。我认为问题出在我的排序代码中。

        $($.parseXML(a).find("ap").each(function () {
        var ap = $(this);
        var by = ap.attr("by");
        var on = kendo.parseDate(ap.attr("on"));
        var lvl = parseInt(ap.attr("lvl"));
        var props = "";
          
        if (apdate.html() != "") $("<br>").appendTo(apdate);
        $("<span" + props + ">").text(by + " (" + kendo.toString(on, User.datetimeFormat) + ") (" + lvl + ")").appendTo(apdate);

I was referencing to the answer here link

从 link 开始:$.get 是加载 xml 文件的异步调用,完成时会回调。你没有文件,你有一个字符串 - 字符串不需要异步“加载”(因为它已经加载)。

所以你有:

$.get("remote_file_url.xml", callback_when_loaded(xml) { ...

但是你想要:

var a = "<root>...";
var xml = $.parseXML(a)
var log = $(xml);
var ap = log.find("ap")...

然后您可以将 log 用作 jquery 对象。 $.parseXML(a) 会给你一个 XML 文档对象,但是要使用 jquery 方法,它需要是一个 jquery 对象,所以用 $() 包起来 - 这是相当于在事件处理程序中使用 thisthis = DOM 节点和 $(this) = jquery 对象。


稍后你有 ap.find("ap") 因为 ap 已经 = $(xml).find("ap") 这相当于 $(xml).find("ap").find("ap")


更新了代码(进行了一些小的调整以删除不相关的“kendo”代码)

var a = '<root><ap by="A" on="2021/10/01 14:03:24" lvl="4"></ap><ap by="A" on="2021/10/01 14:03:59" lvl="2"></ap><ap by="A" on="2021/10/01 14:04:01" lvl="5"></ap><ap by="A" on="2021/10/01 14:04:05" lvl="1"></ap></root>';

var log = $($.parseXML(a))
console.log(log.find("ap").length)

var ap = log.find("ap").clone();
//console.log(ap)

ap.sort(function(a, b) {
  return (parseInt($(a).attr("lvl")) - parseInt($(b).attr("lvl")));
});
//console.log(ap)

ap.each(function() {
  var ap = $(this);
  var by = ap.attr("by");
  //var on = kendo.parseDate(ap.attr("on"));
  var lvl = parseInt(ap.attr("lvl"));

  apdate = $("#output")
  if (apdate.html() != "") 
    $("<br>").appendTo(apdate);
  $("<span>").text(by + "(" + lvl + ")").appendTo(apdate);

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='output'></div>