为啥 .html 工作而不是 innerHTML 或 appendChild

Posted

技术标签:

【中文标题】为啥 .html 工作而不是 innerHTML 或 appendChild【英文标题】:Why does .html work and not innerHTML or appendChild为什么 .html 工作而不是 innerHTML 或 appendChild 【发布时间】:2010-12-23 08:16:47 【问题描述】:

我正在尝试向 div 添加 ajax 响应(它是带有表格、表单等的 html 代码)。

在 FF innerHTML 中完美运行,但在 IE 中它给了我一个未知错误。

我尝试了很多东西,但只有在我添加 jQuery 并在我想要插入代码的 div 上运行 .html 方法时才能正常工作。

有人愿意解释为什么这有效,而不是简单的innerHTML?我尝试查看 .html() 代码,但我想我不是 JS 方面的专家,因为我不明白它在做什么。

【问题讨论】:

【参考方案1】:

IE 记录了几个(pre | table (thead, tbody, tr, tfoot) | div | select).innerHTML 错误

因此,像 jQuery 这样的库通过在 IE 需要的地方应用变通方法,为您抽象出这些错误。

至于你的具体错误......没有看到代码很难说。

在 pre's、某些 div's、select's 上设置 .innerHTML(如果确实失败,将静默失败)但在某些表格元素上设置 .innerHTML(在某些版本的 IE 中)会实际上抛出一个错误/异常。

注意:设置 div 的 .innerHTML 的问题在条件上非常具体,仅在 IE6 和 IE7 中出现。

【讨论】:

【参考方案2】:

IE 对从 javascript 更改 <table>s 很挑剔。如果我没有将表格指定到最后一个细节,包括<tbody> 标签,我之前遇到过麻烦。

【讨论】:

【参考方案3】:

只需使用 jQuery,忘记所有可怕的跨浏览器问题 - 你不会回头!

【讨论】:

【参考方案4】:

我每天都有同样的问题。尝试使用 .innerText 代替 .innerHTML,这将解决您的问题。答案是 Javascript 在 IE 和 FF 中的解析不同。

【讨论】:

如果内容确实是 HTML,则设置 .innerText 将不起作用。 @AntonioCS 已经在使用 jQuery,因此解决了这个问题 - 他只是不确定 IE 失败的确切原因。

以上是关于为啥 .html 工作而不是 innerHTML 或 appendChild的主要内容,如果未能解决你的问题,请参考以下文章

为啥 innerHTML 和 textContent 给出不同的结果?

为啥innerHTML =“”在Firefox中很慢

为啥添加innerHTML后循环和数组停止工作?

为啥使用 element.innerHTML 后事件监听器会停止工作?

为啥 innerHTML 在 for 循环中不能正常工作?

为啥随着 innerHTML 变大,替换 innerHTML 会变慢?