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只会返回类似浏览器页面上真正显示的内容。
