通用javascript代码判断版本号是否在版本范围之间


Posted in Javascript onNovember 29, 2015

通用判断版本号是否在两者之间,也可以搭配判断是否大于某版本号,小于取反即可

PS:需确保版本规范一致,比如都是.号分割的n位版本号

var APP = {};
   //判断指定版本是否在版本范围之间,需确保版本规范一致;比如 (..,..,..)
   APP.betweenVersion = function(curr,start,end,separator){
     if(curr == start || curr == end){
       return true;
     }
     var separator = separator || '.';
     var curr = curr.split(separator);
     var start = start.split(separator);
     var end = end.split(separator);    
     var gtStart = false;
     var ltEnd = false;
 
     gtStart = APP.gtTargetVersion( APP.compareVersionEle(curr,start) );
 
     if(!gtStart){
       return false;
     }
     return !APP.gtTargetVersion( APP.compareVersionEle(curr,end) );
 
   };
   APP.compareVersionEle = function(curr,target){
     var len = curr.length;
     var temp = [];
     var left,right;
     for(var i=;i<len;i++){
 
       left = +curr[i];
       right = +target[i];
 
       if(left == right){
         temp.push();
       }else if(left > right){
         temp.push();
       }else{
         temp.push(-);
       }
     }
     return temp;
   };
   APP.gtTargetVersion = function(arr){
     var res = true;
     var curr,next;
     for(var i=,len=arr.length;i<len;i++){
       curr = arr[i];
       next = arr[i+];
       if( curr>next ){
         if(curr == ){
           res = false;
           break;
         }
         if(curr == ){
           res = true;
           break;
         }        
       }else if(curr == next){
         if(curr == -){
           res = false;
           break;
         }
         if(curr == ){
           res = true;
           break;
         }
       }else{
         if(curr == -){
           res = false;
           break;
         }
         if(curr == ){
           res = true;
           break;
         }
       }
     }
     // console.log(res);
     return res;
   }
   var res = APP.betweenVersion('...','...','...','.');
 console.log(res);

当前项目有需要判断指定版本是否在两个版本之间这个需求,百度谷歌找了一圈,代码都是有局限性的,无法通用,甚至是一堆错误的东西转来转去......

当前方法有两个要点,一个是需要将切开的版本号转为数值型数组,还有一个是对比大小的时候转为 -1 0 1 三个数值的对比,这样,无论隔开的版本号有多大,总体分为几段,都可以正确比对.

下面给大家分享javascript 检测浏览器类型和版本的代码

对象/特征检测法

该方法是一种判断浏览器能力(而非浏览器的确切型号)的通用方法。大部分JS专家认为这个方法最合适,因为他们认为按照该方法所编写的脚本是经得起未来考验的。

//获取IE浏览器的版本号
//返回数值,显示IE的主版本号
function getIEVer() {
 var ua = navigator.userAgent; //获取用户端信息
 var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置
 if (b < 0) {
  return 0;
 }
 return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值
}
alert(getIEVer()); //返回数值8(我的IE8)

如果更关注浏览器的能力而不在乎它实际的身份,就可以使用这种方法。

user-agent字符串检测法

user-agent字符串提供了关于Web浏览器的大量信息,包括浏览器的名称和版本。

var ua = navigator.userAgent.toLowerCase(); //获取用户端信息
var info = {
 ie: /msie/.test(ua) && !/opera/.test(ua),  //匹配IE浏览器
 op: /opera/.test(ua),  //匹配Opera浏览器
 sa: /version.*safari/.test(ua),  //匹配Safari浏览器
 ch: /chrome/.test(ua),  //匹配Chrome浏览器
 ff: /gecko/.test(ua) && !/webkit/.test(ua)  //匹配Firefox浏览器
};
(info.ie) && alert("IE浏览器");
(info.op) && alert("Opera浏览器");
(info.sa) && alert("Safari浏览器");
(info.ff) && alert("Firefox浏览器");
(info.ch) && alert("Chrome浏览器");

通常我们做得最多的,就是判断是否是IE了,其它几种浏览器一般都会符合标准.有些客户只需要符合IE和FF就已经满足了.那么我们可以这样做:

var isIE = (navigator.appName == "Microsoft Internet Explorer");

判断IE远远不止上面一种方法,可以使用IE更多特有的东西,如:window.ActiveXObject,document.all等,这些都属于对象/特征检测法了!通常要在不同的浏览器上写不同的样式(因为IE样式解析也各有不同),那就得判断版本了.可以这样做

//获取IE浏览器的版本号
//返回数值,显示IE的主版本号
function getIEVer() {
 var ua = navigator.userAgent; //获取用户端信息
 var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置
 if (b < 0) {
  return 0;
 }
 return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值
}
alert(getIEVer()); //返回数值7

检测操作系统:

var isWin = (navigator.userAgent.indexOf("Win") != -1); //如果是Windows系统,则返回true
var isMac = (navigator.userAgent.indexOf("Mac") != -1);  //如果是Macintosh系统,则返回true
var isUnix = (navigator.userAgent.indexOf("X11") != -1);  //如果是Unix系统,则返回true
var isLinux = (navigator.userAgent.indexOf("Linux") != -1);  //如果是Linux系统,则返回true
Javascript 相关文章推荐
对采用动态原型方式无法展示继承机制得思考
Dec 04 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
Aug 11 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
Aug 24 Javascript
javascript手风琴下拉菜单实现代码
Nov 12 Javascript
javascript日期格式化方法小结
Dec 17 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
Apr 17 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 Javascript
浅谈react 同构之样式直出
Nov 07 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
Aug 28 Javascript
详解vue-flickity的fullScreen功能实现
Apr 07 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
Apr 07 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 #Javascript
js性能优化技巧
Nov 29 #Javascript
javascript实现C语言经典程序题
Nov 29 #Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 #Javascript
整理Javascript基础入门学习笔记
Nov 29 #Javascript
jquery+json实现数据二级联动的方法
Nov 28 #Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 #Javascript
You might like
提问的智慧(2)
2006/10/09 PHP
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
JavaScript window.location对象
2014/11/14 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python实现优先级队列结构的方法详解
2016/06/02 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
爱之链教学反思
2014/04/30 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
导游词之襄阳古城
2019/09/27 职场文书
详解nginx location指令
2022/01/18 Servers
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers