关于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 相关文章推荐
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
js判断变量是否未定义的代码
Mar 28 Javascript
js网页版计算器的简单实现
Jul 02 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
Sep 27 Javascript
聊一聊JS中this的指向问题
Jun 17 Javascript
Bootstrap按钮组实例详解
Jul 03 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
Sep 13 Javascript
浅谈gulp创建完整的项目流程
Dec 20 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
微信小程序云开发实现云数据库读写权限
May 17 Javascript
Vue的全局过滤器和私有过滤器的实现
Apr 20 Javascript
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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python实现飞机大战
2018/09/11 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
Python 实现向word(docx)中输出
2020/02/13 Python
Python request post上传文件常见要点
2020/11/20 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
最新大学生自我评价
2013/09/24 职场文书
大一学生假期实习的自我评价
2013/10/12 职场文书
面料业务员岗位职责
2013/12/26 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
广告设计应届生求职信
2014/03/01 职场文书
校本课程教学计划
2015/01/19 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript