浅谈vue中document.getElementById()拿到的是原值的问题


Posted in Javascript onJuly 26, 2020

问题

两个界面都有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因为各种原因修改而忘了修改对应样式。

补充知识:document.getElementById()获取一直为null

document.getElementById()获取一直为null的最常见的一个原因是js文件在head标签里

产生的加载顺序问题,导致get不到节点的信息

解决办法:

1.可以body标签下引入js文件

2.在引入语句<script type="text/javascript"> 里面加个defer=true属性

defer 属性规定是否对脚本执行进行延迟,直到页面加载为止。

以上这篇浅谈vue中document.getElementById()拿到的是原值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE6下focus与blur错乱的解决方案
Jul 31 Javascript
js获取select标签的值且兼容IE与firefox
Dec 30 Javascript
js实现window.open不被拦截的解决方法汇总
Oct 30 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
详解自定义ajax支持跨域组件封装
Feb 08 Javascript
详解Vue单元测试case写法
May 24 Javascript
js实现轮播图特效
May 28 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
五句话帮你轻松搞定js原型链
Dec 09 Javascript
关于vue 结合原生js 解决echarts resize问题
Jul 26 #Javascript
Element Tooltip 文字提示的使用示例
Jul 26 #Javascript
Element Popover 弹出框的使用示例
Jul 26 #Javascript
Element Card 卡片的具体使用
Jul 26 #Javascript
Element Carousel 走马灯的具体实现
Jul 26 #Javascript
three.js欧拉角和四元数的使用方法
Jul 26 #Javascript
Element Collapse 折叠面板的使用方法
Jul 26 #Javascript
You might like
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
简单介绍Python中的JSON使用
2015/04/28 Python
十个Python程序员易犯的错误
2015/12/15 Python
python使用opencv读取图片的实例
2017/08/17 Python
python pyheatmap包绘制热力图
2018/11/09 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
小学生保护环境倡议书
2014/05/15 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
给老师的一封感谢信
2015/01/20 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
Nginx动静分离配置实现与说明
2022/04/07 Servers