javascript - 如何在 jQuery 中对附加的 <li> 项进行排序

标签 javascript jquery html xml sorting

我对编程非常陌生,所以请原谅,这可能是一个微不足道的问题,但到目前为止我还没有找到一个令人满意的解决方案来解决我的问题。

在我的 HTML 代码中,我有一个像这样的无序列表。这些列表元素仅用于测试目的。

<ul id="WoodList">
    <li>Banana</li>
    <li>Catv</li>
    <li>Apple</li>
    <li>Orange</li>
    <li>Car</li>
    <li>Pear</li>
    <li>Banana</li>
    <li>Cat2</li>
    <li>Apple4</li>
    <li>Banana1</li>
    <li>Cat</li>
    <li>Apples</li>
    <li>Banana</li>
    <li>Cat</li>
</ul>

我有一个 XML 文件,其中包含树木的简单名称和科学名称,应将其附加到列表中并按字母顺序显示。

var activeLanguage = "de"

function buildList() {
    $.ajax({
        type: "GET",
        url: "xml/wooddata.xml",
        dataType: "xml",
        success: function (data) {
            $(data).find('wood').each(function () {
                var trivialName = $(this).find("name[lang=" + activeLanguage + "]").text();
                var scientificName = $(this).find("scientific_name").text();                
                $("#WoodList").append("<li>" + trivialName + " (" + scientificName + ")</li>");
            });
        }
    });
};

function sortUL(selector) {
    var listItems = selector.children('li').get();
    console.log(listItems);
    $(listItems).sort(function (a, b) {
        var upA = $(a).text().toUpperCase();
        var upB = $(b).text().toUpperCase();
        return (upA < upB) ? -1 : (upA > upB) ? 1 : 0;
    }).appendTo(selector);
};

$(document).ready(function () {
    buildList();
    sortUL("#WoodList");
});

请原谅奇怪的缩进,我与 stackoverflow 编辑器发生了一些争执。

如你所见,我有两个功能。从 xml 文件中获取元素并将这些内容附加到 html 列表,如下所示

<li>Spruce (Picea Abies)</li>

下一个函数应该按字母顺序对列表进行排序。而且它在一定程度上发挥了作用。 html 中的所有 test-list-elements 排序完全正确,但附加的 xml-list-items 始终显示在列表末尾而不进行排序。这可能只是一个小错误,你能帮我吗

最佳答案

首先,您需要在 AJAX 请求返回后执行 sortList() 函数:

success: function (data) {
    $(data).find('wood').each(function () {
        var trivialName = $(this).find("name[lang=" + activeLanguage + "]").text();
        var scientificName = $(this).find("scientific_name").text();
        $("#WoodList").append("<li>" + trivialName + " (" + scientificName + ")</li>");
    });
    sortUL("#WoodList");
}

然后你可以优化排序功能,如下所示:

function sortUL(selector) {
    var $ul = $(selector);
    $ul.find('li').sort(function (a, b) {
        var upA = $(a).text().toUpperCase();
        var upB = $(b).text().toUpperCase();
        return (upA < upB) ? -1 : (upA > upB) ? 1 : 0;
    }).appendTo(selector);
};

Example fiddle

关于javascript - 如何在 jQuery 中对附加的 <li> 项进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669877/

相关文章:

javascript - 将 return 与三元运算符一起使用不起作用

html - 无法确定 html/CSS 中差距的来源;想要它被删除

javascript - 使用 AngularJS 混合完全渲染和部分渲染的页面

javascript - 使用 Node.js 比较两个对象

javascript - 如何在 TypeScript 中创建可在纯 JavaScript 中使用的全局命名空间/类?

javascript - 用div分隔数字

javascript - 编辑 dom 后 CSS nth-child 的奇怪行为

javascript - 增加图表 js 中 x 轴和第一个水平条之间的空间

html - 在 <div> 上发送悬停效果的方式?

html - CSS 圆 Angular 不适用于所有图标