关于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 相关文章推荐
JS 实现Json查询的方法实例
Apr 12 Javascript
JS数组去重与取重的示例代码
Jan 24 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
jQuery解决$符号命名冲突
Jun 18 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
轻松实现jquery选项卡切换效果
Oct 10 Javascript
BootStrap便签页的简单应用
Jan 06 Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
Sep 14 Javascript
微信小程序收藏功能的实现代码
Jun 19 Javascript
如何封装Vue Element的table表格组件
Feb 06 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
PHP file_exists问题杂谈
2012/05/07 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
php截取字符串函数分享
2015/02/02 PHP
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
javascript动态加载二
2012/08/22 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
python 性能优化方法小结
2017/03/31 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
python虚拟环境迁移方法
2019/01/03 Python
详解python中@的用法
2019/03/27 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
关于python 跨域处理方式详解
2020/03/28 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
入团者的自我评价分享
2013/12/02 职场文书
房产公证书范本
2014/04/10 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL