# 章序号/节序号/节/笔记序号
- Objective:用JavaScript修改DOM(html文档)
- Breadcrumb: DOM - Element - 实例属性
# 概念阐释
## 语义
`innerHTML`是一个JavaScript属性,用于访问和更改HTML元素的**内容**。该属性允许读取或添加新的HTML标签,再通过标签对网页框架进行修改。
*因此需要注意的是,使用innerHTML属性来更改元素内容可以带来一定的安全风险,因为它允许用户输入的HTML代码在页面上执行。因此,在使用innerHTML操作元素内容时,应该尽可能的保证输入的内容安全性。*
## 语法
因为是对内容进行修改,通常跟在获取的后面,或者是修改变量时用。
```js
document.获取方法.innerHTML = "";
//还可以用逻辑运算符
```
#### 替换原来的元素
```js
document.body.innerHTML = '<h1>...</h1>';
```
#### 添加新的元素
```js
myDiv.innerHTML += '<h1>...</h1>';
```
# 举例子
1. 访问元素内容
```html
<div id="myDiv">This is my div.</div>
<script>
var myDiv = document.getElementById("myDiv");
var content = myDiv.innerHTML;
console.log(content); // 输出 "This is my div."
//也可以写成
document.getElementById('myDiv').innerHTML;
</script>
```
2. 修改元素内容,需要用到变量
```html
<div id="myDiv">This is my div.</div>
<script>
var myDiv = document.getElementById("myDiv");
myDiv.innerHTML = "This is my new div.";
console.log(myDiv.innerHTML); // 输出 "This is my new div."
//也可以写成
document.getElementById("myDiv").innerHTML = "This is my new div.";
</script>
```
3. 添加新的HTML元素, 需要用到变量, 与[[js DOM 创建HTML标签creatElement]]的结果一样。
```html
<div id="myDiv">This is my div.</div>
<script>
var myDiv = document.getElementById("myDiv");
myDiv.innerHTML += "<p>And this is a new paragraph.</p>";
console.log(myDiv.innerHTML); // 输出 "<div id="myDiv">This is my div.<p>And this is a new paragraph.</p></div>"
</script>
```
1. 点击改变页面内容
```html
<h1> 神秘信息</h1>
<p id='secret'> ******** </p>
<button onclick = 'show()'> 展示神秘信息</button>
<script>
const show = () => {
let secret = document.getElementById('secret');
secret.innerHTML="不告诉你😊";
}
</script>
```
在`innerHTML`内容中加入函数
```js
// 页脚修改
let date = new Date().getFullYear();
document.getElementsByClassName('site-footer')[0].innerHTML = `Copyright © ${date} Zhu Wanyu. All Rights Reserved.`;
// 使用IIFE 立即调用函数表达式
let copyright = document.getElementsByClassName('site-footer')[0];
if (copyright) {
// 使用 IIFE 立即设置内容
(function() {
let date = new Date().getFullYear();
copyright.innerHTML = `Copyright © ${date} Zhu Wanyuuuu. All Rights Reserved.`;
})();
}
```
# 类比、比较与对比
`.innerHTML`修改内容,[[js DOM 修改样式 style属性|.style]]修改样式
# 问题
- [练习题](https://www.codecademy.com/courses/build-interactive-websites/lessons/javascript-dom/exercises/tweak-element)
# 问题答案
新的`<h1>`会替换掉原`<h1>`的内容
```js
document.body.innerHTML = '<h1> this is the new content</h1>';
```
# 备注(经验集/错误集)
## summary
解决的怎么样?
## 参考资料
- [Element: innerHTML property](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML)