jQuery关闭开放标签

时间:2011-02-11 02:57:44

标签: jquery html jquery-xml

在尝试将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 个答案:

答案 0 :(得分:2)

只需拨打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>");

答案 1 :(得分: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)而不是再一次。

P.S我没有测试那段代码,只想提出一些建议......但希望它有效。干杯^^

答案 2 :(得分: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>");

  });
}

答案 3 :(得分:1)

我不认为jQuery是罪魁祸首。

当您致电append("<tr>")时,您希望它做什么?答:您希望它根据您的规范修改DOM。但是, DOM是数据结构,而不是字符串。您无法在DOM中添加“unclosed”元素,因此所有元素在添加时都会固有关闭。

因此,后续的append("<td>...</td>")会在<{em> {<1}}之后而不是在其内部添加TD元素。此外,任何<tr>的尝试都会被忽略,因为考虑到append("</tr>")的处理,它会相当荒谬。