关于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 CSS画图之基础篇
Jul 29 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
Sep 26 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
Nov 02 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
js实现本地时间同步功能
Aug 26 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 jQuery
node.js的Express服务器基本使用教程
Jan 09 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
Apr 23 jQuery
vue组件传值的实现方式小结【三种方式】
Feb 05 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
Jun 16 Javascript
jquery实现有过渡效果的tab切换
Jul 17 jQuery
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中如何实现常用邮箱的基本判断
2014/01/07 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
Vue.js实现备忘录功能
2019/06/26 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
详解Python的单元测试
2015/04/28 Python
简单学习Python time模块
2016/04/29 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
使用C++扩展Python的功能详解
2018/01/12 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
会议开场欢迎词
2014/01/15 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
2015暑假假期总结
2015/07/13 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
postgresql中如何执行sql文件
2023/05/08 PostgreSQL