.hide()、.show()、表格和 IE

Posted

技术标签:

【中文标题】.hide()、.show()、表格和 IE【英文标题】:.hide(), .show(), tables, and IE 【发布时间】:2010-09-16 14:42:17 【问题描述】:

我有一些嵌套表,我想在单击其中一个***行时隐藏/显示它们。

简而言之,标记是:

东西 ....更多tds在这里

现在,我正在使用一些 jQuery 来定位第一个表格行中的链接。单击该链接时,它会下拉一些数据,将其格式化为一组表格行,并将其附加到内部表格中。然后它将 .show() 应用于表格。 (这都是通过 id/class 定位完成的。为简洁起见,我将它们排除在示例之外)。

这在 Firefox 中运行良好。点击链接,数据被加载,主表“展开”,辅助表全部填满。

问题是——Internet Explorer 给了我手指。据我所知,数据被附加到内部表中。问题是 .show() 似乎没有做任何有用的事情。更烦人的是,我有一个页面,它有这个功能,在这两种情况下都能很好地工作——唯一的区别是两件事:

在工作中,内表被包裹在一个 div 中。我什至尝试在这个例子中将我的表格包装在一个 div 中,但没有成功。 在那个不工作的地方,我加载了一个额外的 jQuery 插件——但我已经删除了这个插件并尝试了没有它的页面,它仍然无法显示内部表格。

我尝试将 .show 附加到父 tr、父 td 和表本身,但没有成功。我一定错过了一些非常简单的东西,因为据我所知这应该可以工作。

以前有没有人遇到过这样的事情?

【问题讨论】:

【参考方案1】:

请记住,

元素的 innerhtml 在 IE 中是 只读(肯定是 6,不确定 7)。既然如此,您是否明确添加了 元素?如果没有,请尝试添加一个并将行添加到 body 元素而不是 table 元素。
<table>
  <tbody>
    <!-- Add stuff here... -->
  </tbody>
</table>

有关此的 Microsoft 信息(排序):PRB: Error Setting table.innerHTML in Internet Explorer 注意:它说这是“设计使然”。

【讨论】:

非常感谢!一天多来,我一直在试图解开这个该死的东西! 很高兴知道这修复了它。我以前在使用表格、javascript 和 IE 时也遇到过类似的问题。现在,为了安全起见,我总是显式添加一个 元素。 innerHTML 通常是不稳定的。在 IE 中对表的完整 innerHTML 支持被打破,直到 IE10在标准模式下运行。这是 Internet Explorer 中令人沮丧的错误之一,遗憾的是,在添加 Eric Vasilik 的原始错误实现后,花了 16 整年才得到修复: ericvasilik.com/2006/07/code-karma.html
【参考方案2】:

在 IE 中存在大量与从 Javascript 修改表格内容相关的错误。很多情况下,IE(包括IE7)甚至会崩溃。

我最近遇到了这个问题,我对我想出的解决方法一无所知。让我回顾一下我的日志,看看我能找到什么。


好的,我找到了我遇到的案例。

我正在做类似的事情。我有一个表,我试图通过 Javascript 添加一个带有链接的 &lt;td> 标记,这导致 IE7 中出现内存异常。

最后,我能想出解决它的唯一方法是在 Javascript 中重建整个 &lt;table>,而不是尝试将内容插入现有的。

为了澄清,重建我的意思是创建一个包含表格 HTML 的字符串并将其添加到 div 的 innerHTML。我没有使用 DOM 函数来创建表。

【讨论】:

我读到IE会在修改表时泄漏内存(大概是因为它没有释放删除的和元素)。 如果 IE 没有彻底崩溃,我几乎可以忍受内存泄漏:)

以上是关于.hide()、.show()、表格和 IE的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 查找下一个表格行

如何使用 Angular ui 路由器 ng-hide 和 ng-show 视图?

兼容ie6及以上和firefox等标准浏览器的表格行滑过时背景色切换的效果

触发按钮时如何显示不同的表格数据?

JQuery hide()/show() 在 FF/IE 但不是 Chrome

表格布局问题 - Firefox 与 Chrome 和 IE7