关于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学习点滴 call、apply的区别
Oct 22 Javascript
jQuery on方法传递参数示例
Dec 09 Javascript
js实现的捐赠管理完整实例
Jan 20 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
Validform+layer实现漂亮的表单验证特效
Jan 17 Javascript
AngularJS数据源的多种获取方式汇总
Feb 02 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
详解webpack+angular2开发环境搭建
Jun 28 Javascript
深入理解JS异步编程-Promise
Jun 03 Javascript
我所理解的JavaScript中的this指向
Sep 04 Javascript
js实现搜索提示框效果
Sep 05 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
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
Python实现图片转字符画的示例
2017/08/22 Python
Python虚拟环境项目实例
2017/11/20 Python
python编程嵌套函数实例代码
2018/02/11 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
浅谈django 重载str 方法
2020/05/19 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
生日寄语大全
2014/04/08 职场文书
考核评语大全
2014/04/29 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
施工安全保证书
2015/05/09 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL