排序 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 对象,所以用 $()
包起来 - 这是相当于在事件处理程序中使用 this
:this
= 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>
我所做的是解析 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 对象,所以用 $()
包起来 - 这是相当于在事件处理程序中使用 this
:this
= 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>