innerHTML/outerHTML
innerHTML
表示设置或者获取元素的HTML
,另外还有个outerHTML
属性表示替换掉包含父元素的所有内容。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div class="box">
<li>这是列表</li>
<p>这是段落</p>
</div>
</body>
</html>
先看看innerHTML
的效果:
var oBox = document.getElementsByClassName("box")[0];
oBox.innerHTML = "<span>这是span</span>"
再看看outerHTML
的效果:
var oBox = document.getElementsByClassName("box")[0];
oBox.outerHTML = "<h1>这是span</h1>";
可以看到outerHTML
把父节点div
也给替换了!!!
innerHTML 的执行过程
innerHTML
的操作过程是比较消费性能的,每次设置innerHTML
都会经过如下的步骤:
h1.innerHTML = "<h1>123</h1>"
设置元素内容- 将
<h1>123</h1>
解析为HTML
文档 - 用
DocumentFragment
将这个文档结构变成DOM
节点 - 用原本父元素上所有的内容然后替换成这个
DOM
节点
innerHTML 安全问题
HTML5
和现代浏览器都会阻止通过innerHTML
嵌入script
脚步的程序执行。
document.documentElement.innerHTML= "<script>alert(123)</script>";
textContent/innerText
textContent
和innerText
都表示设置或获取元素文本内容。
当我们给元素插入的内容是纯文本的时候,要避免使用innerHTML
!!!
textContent
和innerText
的区别在于获取到的内容不同
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div class="box">
<style>
.content {
color: orange;
}
</style>
<p>这是p文本</p>
<br />
<p>这是p文本</p>
<br />
<span style="display: none">这是隐藏内容</span>
</div>
</body>
</html>
var oBox = document.getElementsByClassName("box")[0];
console.log(oBox.textContent);
console.log(oBox.innerText);
textContent
返回所有的内容包括style
、script
、设置隐藏的内容,而innerText
只会返回类似浏览器页面上真正显示的内容。