2013-08-29 92 views
9

对不起,作为一个JavaScript noob,但任何人都可以请解释为什么建议不要使用.innerHTML。当我们以.innerHTML的形式有更快,更容易的事情时,为什么我们不应该使用它?为什么建议避免使用.innerHTML?

+1

谁说你不应该使用它?什么比什么更快? – Steve

+2

'innerHTML'在序列化数据之上工作,这不是DOM在概念上工作的方式。在手动构建大块HTML时很容易搞砸某些东西,因此难以维护。另外,JS内部的HTML在许多经验丰富的JS开发人员眼中是非常丑陋的(当你看到一半的JS文件被HTML与JavaScript混合在一起时,你肯定会这么想)。这就是为什么我们有JS模板引擎,还有Angular框架。但是,是的,您可以将一些HTML放入JS中,而不会出现任何功能问题(通过@Evan解答一些旧IE的情况)。 –

回答

12

innerHTML是一个大锤。它会抛出所选DOM元素的内容,并将其替换为当时分配的内容。这导致了一些HTML转义和验证问题。

更重要的是,对于大量事件绑定的页面,使用innerHTML来追加另一个元素会重新生成DOM元素,这意味着事件绑定可能会丢失。

当元素从DOM中移除时,旧版IE中的内存泄漏也存在一些问题。我不告诉你,你不应该使用innerHTML。我在jQuery中一直使用它,当我使用$(selector).html()时。有时候大锤是适合工作的正确工具,并且当事件正确委派时,无论内容重新加载多少都无关紧要。

+1

+1,我几乎忘记了尝试'element.innerHTML + = ...'的人,然后注意到这个元素的后代中的所有事件处理程序/关联的小部件是如何被丢弃的。 –

+0

IIRC我记得Resig为各种浏览器做了一些攻击,因为innerHtml的性能差距很大。我想所有更理由使用包装。 –

+0

+1,我喜欢大锤比喻。如果你知道如何正确使用innerHTML,只要你不需要做狡猾的工作,就可以节省很多时间。就像锤子一样。 – Steve

相关问题