jQuery 在使用 append() 而不是最后时首先插入子项

jQuery inserting children first when using append() instead of last

我在使用 jQuery 向 HTML 中的列表插入子元素时遇到问题。对于任何 JavaScript 相关的事情,我都是初学者,所以我的代码可能非常笨拙且未优化。即使您不能帮助我解决最初的问题,我也总是会提供改进我的代码和学习的建议。

我有一个每秒运行一次的函数(它是从我的 CefSharp 应用程序调用的,不确定它是否相关)。这是我的功能:

function updateOrderQueue(index, reference, pickedup, deliveredto, robotId, statuscode, statustext) {
    var list = $('#orderQueueList');
    var count = $("#orderQueueList li").length;

    if (!document.getElementById('order' + reference) && statuscode < 4 && count < 10) {
        var data = $(`<li class="list-group-item d-flex justify-content-between align-items-center border border-dark" id="order` + reference + `">
                        <h3 class="mt-1" id="text`+ reference + `">
                            [`+index+`] `+ pickedup + ` ➔ ` + deliveredto + ` (` + statustext +  `)
                        </h3>
                        <small class="badge badge-dark rounded" style="font-size:24px;" id="robotQueue`+ reference + `">` + robotId + `</small>
                    </li>`);
        list.append(data).hide().fadeIn(500);
    } else {
        var locations = jQuery("#text" + jq(reference));
        var assignedrobot = jQuery("#robotQueue" + jq(reference));

        locations.text('['+index+'] '+ pickedup + ' ➔ ' + deliveredto + ' (' + statustext + ')');
        assignedrobot.text(robotId);
    }

    var elems = $('#orderQueueList li').detach().sort(function (a, b) {
        if (isNaN($(a).text()) || isNaN($(b).text())) {
            return $(a).text() > $(b).text() ? 1 : -1;
        }
        return $(a).text() - $(b).text();
    });
    list.append(elems);
}

这是 HMTL 代码

<div id="orderQueue" class="">
   <ul class="list-group" id="orderQueueList">
   </ul>
</div>

我将尝试快速解释我打算用它做什么以及它实际上做了什么。

所以基本上,这段代码应该添加排序添加相关的类 到列表中的项目。要添加,该项目需要通过一组要求(尚未添加,状态码低于 4 且项目总数不超过 10 个)。然后我将该项目附加到列表中,我假设它会把它放在列表的末尾(与前置相比,它应该做相反的事情)。

问题是,无论何时添加新项目,它都会被添加到列表的顶部。我的猜测是,这与我将其附加到 ul 这一事实有关。我尝试做类似 $('#orderQueueList li:last') 的操作,但我没有让它工作。我也尝试在添加之前执行 $('#orderQueueList).children()$('#orderQueueList).last()没有成功。

我错过了什么?我是否完全误解了 append 的作用?我是不是代码写错了?

多多指教,

提前致谢。

这里的问题不是.append(),而是后面的.sort()

文本排序受空格影响,所以解决方案是.trim()进行文本比较时的文本:

$("ul").append("<li>new</li>").hide().fadeIn(500);
var elems = $('ul li').detach().sort(function(a, b) {
  if (isNaN($(a).text()) || isNaN($(b).text())) {
    return $(a).text().trim() > $(b).text().trim() ? 1 : -1;
  }
  return $(a).text() - $(b).text();
});
$("ul").append(elems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li>   2</li>
  <li>1555</li>
  <li>xyz</li>
  <li>3</li>
  <li>
  abc
  </li>
</ul>