DOM HTML
这一节学习如何用 JavaScript 读写 HTML 内容与属性:改文字、换图片、改链接、动态写标签。掌握了这些,页面就能根据用户的操作实时变化,这正是"动态网页"的基础。
改变元素内容:innerHTML
innerHTML 既可读取也可写入元素内部的 HTML。写入时字符串里的标签会被解析并真正渲染:
<p id="demo">旧内容</p>
<script>
// 先读取
console.log(document.getElementById("demo").innerHTML); // 输出:旧内容
// 再写入:字符串中的 <b> 会被解析成加粗
document.getElementById("demo").innerHTML = "新内容 <b>加粗</b>";
</script>
运行后段落显示"新内容 加粗",控制台先输出"旧内容"。
改变元素属性
元素的属性(src、href、alt、title 等)可以直接赋值来修改:
<img id="pic" src="cat.jpg" alt="小猫">
<script>
const img = document.getElementById("pic");
img.src = "dog.jpg"; // 图片立即换成 dog.jpg
img.alt = "小狗"; // 替代文字同步修改
console.log(img.src); // 输出:dog.jpg(返回完整地址)
</script>
用事件驱动变化
实际页面中,修改内容常常发生在事件(如点击)之后:把代码写进函数,再绑定到按钮事件上:
<p id="msg">你好</p>
<button onclick="sayHi()">打招呼</button>
<script>
function sayHi() {
document.getElementById("msg").innerHTML = "欢迎来到 DOM HTML 教程!";
}
</script>
点击按钮后,段落文字被替换(结果显示在页面上)。
慎用 document.write
document.write 也能写 HTML,但它有个大坑:页面加载完成后调用,会先清空整个页面再写入:
<button onclick="badWrite()">危险按钮</button>
<script>
function badWrite() {
document.write("整页被覆盖了");
}
</script>
所以现代开发几乎不用它,修改内容优先用 innerHTML 或 textContent。
textContent 与 innerHTML 的区别
innerHTML 会把字符串当作 HTML 解析;textContent 只当纯文本,天然避免"用户输入被当作脚本执行"(XSS 攻击):
const p = document.getElementById("demo");
p.innerHTML = "<b>粗体</b>"; // 页面出现加粗文字
p.textContent = "<b>原样显示</b>"; // 页面显示字面标签文本
如果内容来自用户输入,务必用 textContent 或先做转义。
小结
读写 DOM 的 HTML:内容用 innerHTML(解析标签)或 textContent(纯文本、更安全),属性用点号直接赋值,再配合事件函数即可让页面"活"起来;避免在页面加载完成后调用 document.write。