关于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实现网页上的浮动广告的简单方法
Jun 14 Javascript
浏览器页面区域大小的js获取方法
Sep 21 Javascript
jquery无刷新验证邮箱地址实现实例
Feb 19 Javascript
通过jquery 获取URL参数并进行转码
Aug 18 Javascript
jQuery中:eq()选择器用法实例
Dec 29 Javascript
javascript控制台详解
Jun 25 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
一个仿微博登陆邮箱提示框js开发案例
Jul 28 Javascript
ES6学习教程之模板字符串详解
Oct 09 Javascript
JavaScript实现图片懒加载的方法分析
Jul 05 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
vue-router定义元信息meta操作
Dec 07 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
解析数组非数字键名引号的必要性
2013/08/09 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
ucenter通信原理分析
2015/01/09 PHP
php pdo操作数据库示例
2017/03/10 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
Vue计算属性的使用
2017/08/04 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
keras得到每层的系数方式
2020/06/15 Python
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
行政专员岗位职责说明书
2014/09/01 职场文书
防汛工作情况汇报
2014/10/28 职场文书
追讨欠款律师函
2015/05/27 职场文书
工作表现证明
2015/06/15 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js