通用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 相关文章推荐
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
May 23 Javascript
JavaScript动态插入script的基本思路及实现函数
Nov 11 Javascript
jQuery简单实现网页选项卡特效
Nov 24 Javascript
jQuery中parent()方法用法实例
Jan 07 Javascript
JS实现点击按钮获取页面高度的方法
Nov 02 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
Jun 15 Javascript
从零学习node.js之文件操作(三)
Feb 21 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
vue 封装面包屑组件教程
Nov 16 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
xajax写的留言本
2006/11/25 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
Django框架验证码用法实例分析
2019/05/10 Python
django框架两个使用模板实例
2019/12/11 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
50道外企软件测试面试题
2014/08/18 面试题
好的自荐信的要求
2013/10/30 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
庆元旦活动总结
2014/07/09 职场文书
培训通知
2015/04/17 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
Python中的socket网络模块介绍
2022/07/23 Python