使用带有XML数据的jQuery生成表

时间:2016-02-20 09:13:18

标签: javascript jquery html xml html-table

我是jQuery的新手,js就此而言。我试图从XML数据创建一个表,但我无法得到正确的输出。以下是我到目前为止的情况:

HTML:

<table id="daily_fruit">
    <tbody>

    </tbody>
</table>

jQuery的:

var xml = '<daily_fruit><day>Mon</day><type>apple</type><day>Tues</day><type>orange</type><day>Wed</day><type>banana</type><day>Thur</day><type>pear</type></daily_fruit>';

xmlDoc = $.parseXML(xml),
  $xml = $(xmlDoc);
$($xml).each(function() {

  var showTimes = $xml.find('daily_fruit').each(function() {
    var $day = $(this).find('day').text();
    var $type = $(this).find("type").text();

    $("#daily_fruit").find('tbody')
      .append($('<tr>')
        .append($('<td>')
          .append($day))
      )
      .append($('<td>')
        .append($type))
  });
});

当前输出:

MonTuesWedThur
appleorangebananapear

期望的输出:

Mon  apple
Tues orange
Wed  banana
Thur pear

我认为我很接近,但我无法理解。

2 个答案:

答案 0 :(得分:0)

尝试修改XML,以便每个水果都在自己的标记内。然后,不要为每个循环找到“daily_fruit”标记,而是使用“fruit”标记。

这是一个jsfiddle: https://jsfiddle.net/57wgab88/

var xml = '<daily_fruit><fruit><day>Mon</day><type>apple</type></fruit><fruit><day>Tues</day><type>orange</type></fruit><fruit><day>Wed</day><type>banana</type></fruit><fruit><day>Thur</day><type>pear</type></fruit></daily_fruit>';

xmlDoc = $.parseXML(xml),
  $xml = $(xmlDoc);
$($xml).each(function() {

  var showTimes = $xml.find('fruit').each(function() {
    var $day = $(this).find('day').text();
    var $type = $(this).find("type").text();
    $("#daily_fruit").find('tbody')
      .append($('<tr>')
        .append($('<td>')
          .append($day))
        .append($('<td>')
          .append($type))
      )
  });
});

答案 1 :(得分:0)

鉴于这种XML结构,您应该反而通过<day>元素进行迭代。假设每个<day>后面始终跟有相应的<type>元素:

&#13;
&#13;
var xml = '<daily_fruit><day>Mon</day><type>apple</type><day>Tues</day><type>orange</type><day>Wed</day><type>banana</type><day>Thur</day><type>pear</type></daily_fruit>';

xmlDoc = $.parseXML(xml),
  $xml = $(xmlDoc);
$($xml).each(function() {

   var showTimes = $xml.find('day').each(function() {
    var $day = $(this).text();
    var $type = $(this).next("type").text();
    $("#daily_fruit").find('tbody')
      .append($('<tr>')
        .append($('<td>')
          .append($day))
        .append($('<td>')
          .append($type))
      )
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="daily_fruit">
  <tbody>

  </tbody>
</table>
&#13;
&#13;
&#13;