在本教程中,您将学习如何使用 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 属性设置您无法控制的新内容,以免造成安全风险。