1

在尝试将 xml 文件解析为表格格式时,jQuery 不断关闭我的开始<tr>标记。有解决办法吗?

<script type="text/javascript">
    $(document).ready(function(){
    $.ajax({
            type: "GET",
            url: "sample-data.xml",
            dataType: "xml",
            success: parseXml
        });
    }); 

    function parseXml(xml)
    {
      $(xml).find("user").each(function()
      {  
        var id = "#sortable";  
            $(id).append("<tr>");
            $(id).append("<td>" + $(this).find("name").text() + "</td>");
            $(id).append("</tr>");

      });
    }
</script>

<table id="table" class="tablesorter">
    <thead>
      <tr>
        <th>test</th>
      </tr>
    </thead>
    <tbody id="sortable">

    </tbody>
</table>

这是输出标记的方式:

 <tr></tr>
 <td>data</td>
4

4 回答 4

3

只需调用 1 个追加而不是多个追加。

更改此部分:

        $(id).append("<tr>");
        $(id).append("<td>" + $(this).find("name").text() + "</td>");
        $(id).append("</tr>");

对此:

        $(id).append("<tr><td>" + $(this).find("name").text() + "</td></tr>");
于 2011-02-11T03:03:22.873 回答
2

我建议不要在循环中使用 append 。相反,将其输出到循环之外。

var id = $("#sortable");
var html = '';

  $(xml).find("user").each(function()
  {  

    html += '<tr>';
      html += '<td>';
          html += $(this).find("name").text( );
      html += '</td>';
    html += '</tr>';   
  });

  id.append(html);

如果您要在循环中多次使用 $(this),例如年龄、性别等,我建议您为 $(this) 分配一个变量,而不是一遍又一遍地调用 $(this)。

PS我没有测试该代码,只是想提出一些建议......但希望它有效。加油^^

于 2011-02-11T03:35:55.737 回答
1

是的,jQuery 并没有真正起作用。试试这个:

function parseXml(xml)
{
  $(xml).find("user").each(function()
  {  
    var id = "#sortable";  
        $(id).append('<tr></tr>');
        $(id).find('tr:last').html("<td>" + $(this).find("name").text() + "</td>");

  });
}
于 2011-02-11T03:00:25.790 回答
1

我不认为 jQuery 是这里的罪魁祸首。

当你打电话append("<tr>")时,你想让它做什么?答:您希望它根据您的规范修改 DOM。但是,DOM 是一种数据结构,而不是字符串。您不能将“未关闭”元素添加到 DOM,因此所有元素在添加时本质上都是关闭的。

结果,后续是在它之后而不是在它里面append("<td>...</td>")添加TD元素。此外,任何尝试都会被简单地忽略,因为考虑到.<tr>append("</tr>")append("<tr>")

于 2012-07-15T04:47:19.730 回答