在 JavaScript 中使用 innerHTML 的缺点是什么?
innerHTML 属性是文档对象模型 (DOM) 的一部分,用于设置或返回元素的 HTML 内容。其中返回值表示 HTML 元素的文本内容。它允许 JavaScript 代码操纵正在显示的网站。更具体地说,它设置或返回元素的 HTML 内容(内部 HTML)。 innerHTML 属性被广泛用于修改网页的内容,因为它是修改 DOM 的最简单方法。但是在 JavaScript 中使用 innerHTML 也有一些缺点。
在 JavaScript 中使用 innerHTML 属性的缺点:
- 使用innerHTML非常慢:使用innerHTML的过程要慢得多,因为它的内容构建得很慢,而且已经解析过的内容和元素也会重新解析,这需要时间。
- 保留附加到任何 DOM 元素的事件处理程序:事件处理程序不会附加到通过自动设置 innerHTML 创建的新元素。为此,必须跟踪事件处理程序并将其手动附加到新元素。这可能会导致某些浏览器出现内存泄漏。
- 内容在任何地方都被替换:无论您使用 innerHTML 添加、追加、删除或修改网页上的内容,所有内容都会被替换,并且该元素内的所有 DOM 节点也会被重新解析和重新创建。
- 不支持附加到 innerHTML:通常,+= 用于 JavaScript 中的附加。但是在使用 innerHTML 附加到 Html 标记时,会重新解析整个标记。
例子:
Geeks
title = document.getElementById('#geek') // The whole "geek" tag is reparsed title.innerHTML += 'forGeeks
' - 旧内容替换问题:即使使用 object.innerHTML = object.innerHTML + 'html' 而不是 object.innerHTML += 'html',旧内容也会被替换。如果不重新解析整个 innerHTML,就无法追加。因此,使用innerHTML 变得非常缓慢。当需要将动态 DOM 元素创建为加号时,字符串连接无法扩展,并且引号的开头和结尾变得难以跟踪。
- 可以破坏文档: innerHTML 没有提供适当的验证,因此可以使用任何有效的 HTML 代码。这可能会破坏 JavaScript 的文档。甚至可以使用损坏的 HTML,这可能会导致意想不到的问题。
- 也可用于跨站点脚本 (XSS): innerHTML 可以向网页添加文本和元素这一事实,很容易被恶意用户用来在其他 HTML 元素标签中操纵和显示不需要或有害的元素。跨站脚本还可能导致敏感信息的丢失、泄露和更改。
例子:
Using innerHTML in JavaScript
GeeksforGeeks
A computer science
portal for geeks.
输出: