在本教程中,您将学习如何使用 JavaScript 元素的 innerHTML 属性来获取或设置元素包含的 HTML 元素。
innerHTML 是 Element 的一个属性,它允许您获取或设置元素包含的 HTML 标签:
- element.innerHTML = 'new content';
- element.innerHTML;
要获取元素中包含的 HTML 标签,你可以使用以下语法:
- let content = element.innerHTML;
当您读取某个元素的 innerHTML 时,Web 浏览器序列化该元素后代的 HTML 片段。
假设您有以下 HTML 片段:
- <ul id="menu">
- <li>Home</li>
- <li>Services</li>
- </ul>
以下示例使用 innerHTML 属性来获取 <ul> 元素的内容:
- let menu = document.getElementById('menu');
- console.log(menu.innerHTML);
代码是如何运行的:
输出:
- <li>Home</li>
- <li>Services</li>
要设置属性的 innerHTML 值,请使用以下语法:
- element.innerHTML = newHTML;
-
这将会使用新的内容替换元素的现有所有元素,这包括文本元素或者 HTML 标签。
例如,您可以通过给 document.body 设置空的 innerHTML 值来删除文档的全部内容:
- document.body.innerHTML = '';
-
HTML5 指定不应执行用 innerHTML 插入的 <script> 标记。
假设您有以下 index.html 文档:
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>JS innerHTML example</title>
- </head>
-
- <body>
- <div id="main"></div>
- <script src="app.js"></script>
- </body>
-
- </html>
app.js 文件如下所示:
- const scriptHTML = `<script>alert("Alert from innerHTML");</script>`;
- const main = document.getElementById('main');
-
- main.innerHTML = scriptHTML;
在这个例子中,<script> 标签内部的 alert() 不会执行。
但是,如果将 app.js 源代码更改为以下内容:
- const main = document.getElementById('main');
-
- const externalHTML = `<img src='1' onerror='alert("Error loading image")'>`;
- // shows the alert
- main.innerHTML = externalHTML;
在本例中,src='1' 的图像将无法成功加载。因此,将执行 onerror回调函数运行 alert() 。黑客可能会包含恶意代码,而不是简单的 alert,打开网页的用户将容易受到攻击。
因此,您不应该使用 innerHTML 设置您无法控制的内容,否则您将面临潜在的安全风险。
如果要在元素中插入纯文本,可以使用 textContent 属性而不是 innerHTML.。textContent 不会被解析为 HTML,而是被解析为原始文本。
使用 innerHTML 元素的属性来获取或设置元素中包含的 HTML。innerHTML 属性返回元素子元素的 HTML 片段,包括页面所做的任何更改。请勿使用 innerHTML 属性设置您无法控制的新内容,以免造成安全风险。