浅谈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获取父节点方法
Aug 20 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
JavaScript实现列出数组中最长的连续数
Dec 29 Javascript
jquery操作复选框checkbox的方法汇总
Feb 05 Javascript
浅谈javascript中this在事件中的应用
Feb 15 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
Node.js Buffer模块功能及常用方法实例分析
Jan 05 Javascript
Vue实现省市区三级联动
Dec 27 Vue.js
关于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实现邮件发送并带有附件
2014/01/24 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
Javascript模块模式分析
2008/05/16 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
vue 实现tab切换保持数据状态
2020/07/21 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Swift中的协议(protocol)学习教程
2016/07/08 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
PHP统计代码行数的小代码
2019/09/19 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
财务学生的职业生涯发展
2014/02/11 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android