关于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 预解析
Oct 25 Javascript
在jQuery中 常用的选择器介绍
Apr 16 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
Javascript基础教程之函数对象和属性
Jan 18 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
js实现年月日表单三级联动
Apr 17 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
vue-resource 拦截器(interceptor)的使用详解
Jul 04 Javascript
高性能的javascript之加载顺序与执行原理篇
Jan 14 Javascript
Postman如何实现参数化执行及断言处理
Jul 28 Javascript
vue实现动态表格提交参数动态生成控件的操作
Nov 09 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
基于php实现的验证码小程序
2016/12/13 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
javascript 伪数组实现方法
2010/10/11 Javascript
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
python实现备份目录的方法
2015/08/03 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
python中spy++的使用超详细教程
2021/01/29 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
青年文明号事迹材料
2014/01/18 职场文书
班队活动设计方案
2014/01/30 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
2015年老干部工作总结
2015/04/23 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
对讲机知识
2022/04/07 无线电
Oracle中DBLink的详细介绍
2022/04/29 Oracle