关于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 相关文章推荐
prototype 中文参数乱码解决方案
Nov 09 Javascript
Jquery数独游戏解析(一)-页面布局
Nov 05 Javascript
基于javascript的JSON格式页面展示美化方法
Jul 02 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
图解js图片轮播效果
Dec 20 Javascript
JS修改地址栏参数实例代码
Jun 14 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
Vue组件教程之Toast(Vue.extend 方式)详解
Jan 27 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
react使用CSS实现react动画功能示例
May 18 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下进行数组合并的代码
2008/07/22 PHP
php日历制作代码分享
2014/01/20 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
yii权限控制的方法(三种方法)
2015/12/28 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
详解JS函数重载
2014/12/04 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
最基础的Python的socket编程入门教程
2015/04/23 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python绘制彩虹图
2019/12/16 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
营销与策划个人求职信
2013/09/22 职场文书
优秀团员个人的自我评价
2013/10/02 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
煤矿安全承诺书
2014/05/22 职场文书
写得不错的求职信范文
2014/07/11 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
机械生产实习心得体会
2016/01/22 职场文书