对不起,作为一个JavaScript noob,但任何人都可以请解释为什么建议不要使用.innerHTML
。当我们以.innerHTML
的形式有更快,更容易的事情时,为什么我们不应该使用它?为什么建议避免使用.innerHTML?
回答
innerHTML
是一个大锤。它会抛出所选DOM元素的内容,并将其替换为当时分配的内容。这导致了一些HTML转义和验证问题。
更重要的是,对于大量事件绑定的页面,使用innerHTML
来追加另一个元素会重新生成DOM元素,这意味着事件绑定可能会丢失。
当元素从DOM中移除时,旧版IE中的内存泄漏也存在一些问题。我不告诉你,你不应该使用innerHTML
。我在jQuery中一直使用它,当我使用$(selector).html()
时。有时候大锤是适合工作的正确工具,并且当事件正确委派时,无论内容重新加载多少都无关紧要。
+1,我几乎忘记了尝试'element.innerHTML + = ...'的人,然后注意到这个元素的后代中的所有事件处理程序/关联的小部件是如何被丢弃的。 –
IIRC我记得Resig为各种浏览器做了一些攻击,因为innerHtml的性能差距很大。我想所有更理由使用包装。 –
+1,我喜欢大锤比喻。如果你知道如何正确使用innerHTML,只要你不需要做狡猾的工作,就可以节省很多时间。就像锤子一样。 – Steve
- 1. 为什么建议避免xml属性,并使用元素
- 2. 为什么Symfony2建议避免使用'传统'php会话?
- 3. 为什么要避免Application.Worksheetfunction?
- 4. android EditText什么inputType,以避免文字建议
- 5. 跟踪和避免循环中的错误有什么建议?
- 6. 为什么要逃避和避免XSS
- 7. 为什么建议避免外键上的单向一对多关联?
- 8. 为什么不建议使用HibernateDaoSupport?
- 9. 为什么使用FSTAT不建议
- 10. 避免sql_variant但使用什么?
- 11. 如何避免不建议DataList控件
- 12. 避免radcombobox建议列表从崩溃
- 13. 为什么延续避免stackoverflow?
- 14. 为什么要在SQL中避免SELECT *?
- 15. 为什么需要避免complexType?
- 16. 为什么要避免动态SQL查询?任何建议删除那里坏的部分,并使用这些?
- 17. 建议使用extern来避免头依赖?
- 18. 什么是建议为什么使用derby.js
- 19. 为什么我应该避免在servlet中使用InheritableThreadLocal?
- 20. 为什么要避免在java中使用Runtime.exec()?
- 21. 为什么要避免使用“是”和“不是”?
- 22. 为什么我应该避免使用DbUnit来测试MySQL?
- 23. 为什么要避免使用i,j in for循环
- 24. 为什么要避免使用多字节流在Java中
- 25. 关于如何避免Go中的导入循环有什么好建议?
- 26. 当创建ILE RPG程序为什么要默认避免
- 27. 为什么和什么时候应该使用innerHTML
- 28. 什么是锅炉板码?为什么要避免它?
- 29. 为什么innerHTML返回'undefined'?
- 30. 为什么不建议使用声纳使用e.printstacktrace()?
谁说你不应该使用它?什么比什么更快? – Steve
'innerHTML'在序列化数据之上工作,这不是DOM在概念上工作的方式。在手动构建大块HTML时很容易搞砸某些东西,因此难以维护。另外,JS内部的HTML在许多经验丰富的JS开发人员眼中是非常丑陋的(当你看到一半的JS文件被HTML与JavaScript混合在一起时,你肯定会这么想)。这就是为什么我们有JS模板引擎,还有Angular框架。但是,是的,您可以将一些HTML放入JS中,而不会出现任何功能问题(通过@Evan解答一些旧IE的情况)。 –