关于laydate.js加载laydate.css路径错误问题解决


Posted in Javascript onDecember 27, 2017

前言

laydate.js是属于Javascript系列的一款日期控件与时间插件,laydate.js支持兼容IE6在内的主流浏览器。laydate.js经过贤心大大的重写之后功能越来越强大,用起来也愈渐灵活了,但是在一个基于angular+ocLazyLoad的项目中出了点问题。

发现问题

laydate.js是通过ocLazyLoad异步加载引入的,结果始终加载不出来laydate.css文件,看了下路径错误,于是扒开代码发现是这样写的:

getPath:function(){
 var e=document.scripts,
 t=e[e.length-1],
 n=t.src;
 if(!t.getAttribute("merge"))
 return n.substring(0,n.lastIndexOf("/")+1)
}()

它是需要先获取到laydate.js的路径,然后再加上laydate.css的那一截最终拼接成一个完整的路径。

作者用的获取laydate.js路径的思路是:由于判断路径的js代码一般都直接放在js文件中而不是函数中,所以当加载该js文件时会立即执行其中的语句,而执行此语句时所获取到的js文件数目正好是e.length-1,因为页面后面的js文件还没有加载,所以该处的js文件获取的数目并不是页面所有的js文件的数目。这样一来,获取路径就无需再遍历了,而且文件判断也无需文件名,判断更加准确(e.length-1永远都是其文件本身)。

但是这种方法有缺陷,直接在html页面中用script标签引入没得问题,如果通过document.write("<script src='*.js'></script")document.createElement("script")动态加载亦或者异步加载等得到的路径却是最后一个js文件的路径,而非当前j文件的路径。

于是想起了document.currentScript ,一步就能到位,但是存在一定的兼容性问题。

var curSrc = document.currentScript.src;
return curSrc.substring(0,curSrc.lastIndexOf("/")+1);

最终还是使用了下面这种简单粗暴的方法:

getPath:function(){
 var e=document.scripts, n;
 for(var i=e.length;i>0;i--){
 if(e[i-1].src.indexOf("laydate.js")>-1){
 n=e[i-1].src.substring(0,e[i-1].src.lastIndexOf("/")+1);
 }
 }
 return n;
}()

这种方法的思路很清晰,根据文件名获取引用的文件的src属性并进行判断截取即可。但这种办法有以下两个缺点:

1、需要遍历页面的所有js文件,有时可能效率会比较低。(我页面的js文件没几个,哈哈)

2、如果页面中出现目录不同的重名的js文件则可能判断错误。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript showModalDialog模态对话框使用说明
Dec 31 Javascript
网页打开自动最大化的js代码
Aug 22 Javascript
Javascript实现视频轮播在pc端与移动端均可
Sep 29 Javascript
Jquery Mobile 自定义按钮图标
Nov 18 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
May 28 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
Oct 17 Javascript
js实现带进度条提示的多视频上传功能
Dec 13 Javascript
JavaScript实现短信倒计时60s
Oct 09 Javascript
AngularJS中table表格基本操作示例
Oct 10 Javascript
基于Vue中点击组件外关闭组件的实现方法
Mar 06 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 Javascript
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
javascript连接mysql与php通过odbc连接任意数据库的实例
Dec 27 #Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
Dec 27 #Javascript
使用命令行工具npm新创建一个vue项目的方法
Dec 27 #Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 #Javascript
VSCode 配置React Native开发环境的方法
Dec 27 #Javascript
VSCode配置react开发环境的步骤
Dec 27 #Javascript
在vue项目中安装使用Mint-UI的方法
Dec 27 #Javascript
You might like
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
第1次亲密接触PHP5(2)
2006/10/09 PHP
用PHP调用数据库的存贮过程!
2006/10/09 PHP
深入理解PHP内核(一)
2015/11/10 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
Vue表单实例代码
2016/09/05 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
原生js实现分页效果
2020/09/23 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
python的列表List求均值和中位数实例
2020/03/03 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
联强国际笔试题面试题
2013/07/10 面试题
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
机械工程师的岗位职责
2013/11/17 职场文书
求职个人评价范文
2014/04/09 职场文书
小学班主任个人总结
2015/03/03 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server