javascript - jQuery,将单个 xml 列表解析为多个无序列表

标签 javascript jquery xml list parsing

源 XML 如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<area>
    <ticket>
        <ticketnumber>001</ticketnumber>
        <location>Location</location>
    </ticket>
    <ticket>
        <ticketnumber>001</ticketnumber>
        <location>Location</location>
    </ticket>
    <ticket>
        <ticketnumber>001</ticketnumber>
        <location>Location</location>
    </ticket>...
</area>

我可以使用以下代码将其解析为现有的无序列表:

$(document).ready(function(){
    $.ajax({
        type: "GET",
        url: "feed.xml",
        dataType: "xml",
        success: function(xml) {
                $(xml).find('ticket').each(function(){
                    var varTicket = $(this).find('ticketnumber').text();
                    var varLocation = $(this).find('location').text();
                    var varTheHTML = '<li>'+varTicket+' '+varLocation+'</li>';
                    $(varTheHTML).appendTo("#ticket-test");
                });
        },
        error: function() {
            alert("The XML File could not be processed correctly.");
        }
    });

});

这为我提供了预期的填充列表。

<ul id="ticket-test">
    <li>001 Location</li>
    <li>001 Location</li>
    <li>001 Location</li>...
</ul>

当我需要将这个列表拆分成多个列表时,问题就开始出现了,最好嵌套在主列表中。新结构现在是:

<ul id="ticket-test">
    <li>
        <ul>
            <li>001 Location</li>
            <li>001 Location</li>
            <li>001 Location</li>...
        </ul>
    </li>
    <li>
        <ul>
            <li>001 Location</li>
            <li>001 Location</li>
            <li>001 Location</li>...
        </ul>
    </li>...
</ul>

源 XML 本质上是一个平面列表,因此我需要将这些列表项分配到 block 中,例如 10 个左右(稍后与 unslider 一起使用)。

我已经尝试在 .each 函数中运行计数器并使用 return false 再次跳出,但代码很快变成了意大利面条式连接,我确信有更优雅的方法可以实现这一点。

我也尝试过 .split 和 for 循环,但总是碰壁。

最佳答案

你可以这样做

  $(document).ready(function() {
    $.ajax({
      type: "GET",
      url: "feed.xml",
      dataType: "xml",
      success: function(xml) {
        var html = '<li><ul>';
        var counter = 10;
        $(xml).find('ticket').each(function(i, v) {
          var varTicket = $(v).find('ticketnumber').text();
          var varLocation = $(v).find('location').text();
          if (i > 0 && i % counter == 0) {
            html += '</ul></li><li><ul>';
          }
          html += '<li>' + varTicket + ' ' + varLocation + '</li>';



        });
        $(html + '</ul></li>').appendTo("#ticket-test");
      },
      error: function() {
        alert("The XML File could not be processed correctly.");
      }
    });

  });

查看演示:https://jsfiddle.net/y0d1or6h/

关于javascript - jQuery,将单个 xml 列表解析为多个无序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39608274/

相关文章:

javascript - 使用 jquery 从 span 标签中删除 € 符号

javascript - 带有 Onclick 事件的右键单击 Div 不会在上下文菜单中显示链接选项

javascript - 导航时更新模型变量

jquery - jScrollPane 向下拖动列表项时向下滚动

javascript - 如何设置 jQuery 函数的顺序,以便一个在另一个完成呈现内容后触发?

javascript - 那个过滤器叫什么?

javascript - 使用 javascript 更改嵌套对象数据

android - 删除所有语言的字符串 Android

android - LinearLayout 扩展元素

android - 如何使形状按比例放大并在 android 中保持该大小?