jQuery 关闭打开标签

发布于 2024-10-16 15:54:13 字数 970 浏览 9 评论 0原文

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

<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>

While trying to parse an xml file into table format, jQuery keeps closing my opening <tr> tag. Is there a work around for this?

<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>

This is how the markup is being outputted:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

孤芳又自赏 2024-10-23 15:54:14

只需调用 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>");

Simply call 1 append instead of multiple appends.

Change this part:

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

to this:

        $(id).append("<tr><td>" + $(this).find("name").text() + "</td></tr>");
稍尽春風 2024-10-23 15:54:14

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

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我没有测试该代码,只是想提出一些建议......但希望它能起作用。干杯^^

I'd suggest to not use append on the loop. Instead, output it outside the loop.

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);

In cases that you're going to use $(this), many times inside the loop, like for age, gender etc, I suggest you assign a variable to $(this) instead of calling $(this) over and over again.

P.S I didn't test that code, just want to suggest something... but hope it works. Cheers ^^

过气美图社 2024-10-23 15:54:14

是的,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>");

  });
}

Yeah, jQuery doesn't really work that. Try this:

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>");

  });
}
谎言月老 2024-10-23 15:54:14

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

当您调用 append("") 时,您希望它做什么?答案:您希望它根据您的规范修改 DOM。但是,DOM 是一种数据结构,而不是字符串。您无法将“未关闭”元素添加到 DOM,因此所有元素在添加时本质上都是关闭的。

因此,后续的 append("...") 将在 之后添加 TD 元素; 而不是在它的内部。此外,任何 append("") 的尝试都会被忽略,因为考虑到 append("") 的处理,这将是相当无意义的>。

I don't think that jQuery is the culprit here.

When you call append("<tr>"), what do you want it to do? Answer: You want it to modify the DOM per your specification. But, the DOM is a data-structure, not a string. You cannot add an "unclosed" element to the DOM, so all elements are inherently closed at the time they are added.

As a result, the subsequent append("<td>...</td>") is adding the TD element after the <tr> rather than inside of it. Furthermore, any attempt to append("</tr>") is simply ignored since it would be rather nonsensical given the handling of append("<tr>").

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文