问题

两个界面都有id="test"的div,内容不同,路由切换的时候document.getElementById()拿到的是原界面的值。

问题代码

// 页面1
<div id="test">aaa</div>
// 页面2
<div id="test">bbb</div>

// 路由切换如下:
<transition name="card-fade">
	<router-view/>
</transition>
.card-fade-enter-active {
  animation: bounce-in 2s;
}

现象

从页面1跳转到页面2时,document.getElementById(‘test’),始终拿到的是aaa。
反之从页面2跳到页面1时,document.getElementById(‘test’),始终拿到的是bbb。

思考

见鬼了,document.getElementById()也有缓存吗??
于是,我在页面3上同样尝试document.getElementById(‘test’),当从页面1跳到页面3同样拿到aaa。
见鬼了,dom不会被销毁吗?
但是如果页面1跳转另一个新的页面4再跳回3,就显示document.getElementById(‘test’)=null了。
也就是说dom没什么问题确实存在就能获取到,不存在就为空。

原因

转头一看路由跳转的时候,transition是啥?呀这个动画导致的啊!!!
因为我两个界面切换的时候有动画,所以从页面1切换页面2的那一秒getElementById(‘test’)确实存在两个,而且拿到的是第一个。

反思

1、尽量不要出现ID相同的节点,即便页面不同,以为不会同时出现。
2、控制样式尽量不要通过#id,而是给节点附加样式.class,防止id因为各种原因修改而忘了修改对应样式。

Logo

前往低代码交流专区

更多推荐