【问题标题】:JQuery tbody question - ASP.NETJQuery tbody 问题 - ASP.NET
【发布时间】:2009-03-08 18:05:32
【问题描述】:

我有一个类似这样的 aspx 页面:

<table runat="server" id="tblTEst">
  <tr id="trHeader" runat="server">

  </tr>
  <tr id="trRow1" runat="server">

  </tr>
  <tr id="trRow2" runat="server">

  </tr>
</table>

当我写我的 JQuery 说要计数 s 时,我需要这样做:

alert($('#' + strTableId).children('tbody').children('tr').length);

我的问题是何时添加 TBODY?当我做一个 InnerHTML 时,我确实看到了 TBODY。我想知道这是否是 ASP.NET 所做的事情?

编辑 感谢您的回答。如果是浏览器添加的,我是否需要担心在多个浏览器中测试代码以确保 JQuery 的兼容性?我的印象是,JQuery 兼容所有浏览器,我不必担心在不同浏览器上测试代码。

【问题讨论】:

  • 从您发布的示例代码中无法确定何时将 TBODY 部分添加到您的表中。查看页面源代码时是否可见?在这种情况下它是由 ASP.NET 添加的,否则它是在客户端添加的。
  • 是的,我确实在源代码中看到了 TBODY
  • 回答您的第二个问题:jQuery 试图抽象出一些浏览器差异,但是一旦您处理了浏览器纠正无效 HTML 的方式,您就会离开地图。最好更正您的标记。

标签: asp.net jquery


【解决方案1】:

它既不是 ASP.Net 也不是 jQuery,它是您的浏览器。 jQuery 访问页面的 DOM,该页面由浏览器基于 ASP.Net 生成的 HTML 代码构建。对于表,当没有明确声明时,会添加一个 TBODY 元素来保存表的“主体”行 (TR)。

【讨论】:

    【解决方案2】:

    这是浏览器在构建 DOM 时清理 HTML 过程的一部分。 standard specifies 表示 TR 元素必须出现在 TBODY、THEAD 或 TFOOT 元素中,由于您没有指定这些元素,因此浏览器会为您添加一个来帮助您。

    如果你想忽略这一点,你可以将你的表达式重写为:

    alert($('#' + strTableId).find('tr').length);
    

    ...但是,您最好在 TBODY 中显式包装您的行,以避免将来出现混淆。

    【讨论】:

      【解决方案3】:

      最好的办法是在服务器端使用 tbody 正确构建表格。这样,您就不必担心浏览器之间的不一致了。

      【讨论】:

        猜你喜欢
        • 2010-12-20
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多