浅谈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 相关文章推荐
JS判断当前日期是否大于某个日期的实现代码
Sep 02 Javascript
js数组循环遍历数组内所有元素的方法
Jan 18 Javascript
JS判断是否360安全浏览器极速内核的方法
Jan 29 Javascript
Javascript中的prototype与继承
Feb 06 Javascript
canvas实现钟表效果
Feb 13 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
常用的9个JavaScript图表库详解
Dec 19 Javascript
在Vue中使用echarts的方法
Feb 05 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
24个解决实际问题的ES6代码片段(小结)
Feb 02 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 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
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python制作数据导入导出工具
2015/07/31 Python
python如何获取服务器硬件信息
2017/05/11 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
民族团结先进个人材料
2014/02/05 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
无罪辩护词范文
2015/05/21 职场文书
Python基础之Socket通信原理
2021/04/22 Python
SpringBoot整合Minio文件存储
2022/04/03 Java/Android