为什么在控制台打印的DOM元素点开后结构变了?
我在调试页面时发现,用 console.log(document.querySelector('.my-box')) 打印出来的 DOM 元素,点开查看结构的时候,和页面当前实际的 HTML 不一致,明明我 JS 已经动态加了子元素,但控制台里还是旧的结构,这是为啥?
我试过强制刷新、重新执行查询,甚至加了 setTimeout 延迟打印,但点开那个 ▶ 还是显示没更新前的样子。难道 console.log 拿到的是快照?
下面是我的测试代码:
<div class="my-box">
<span>原始内容</span>
</div>
<script>
const box = document.querySelector('.my-box');
const newEl = document.createElement('p');
newEl.textContent = '动态添加的内容';
box.appendChild(newEl);
console.log(box); // 点开看结构,有时候看不到 p 标签
</script>
console.log 打印对象是存引用,不是快照,你点开那个 ▶ 的时候浏览器才去读对象的当前状态。想看打印那一刻的真实结构,直接打印字符串就行:
差不多就行,以后遇到对象打印问题,记得转字符串或者克隆一份就完事了。