美文网首页
JavaScript常见函数

JavaScript常见函数

作者: lucky婧 | 来源:发表于2016-12-24 23:13 被阅读0次

    兼容获取非行间样式

    function getStyle(obj,name){
        return obj.currentStyle?obj.currentStyle[name]:getComputedStyle(obj,false)[name];
    }
    

    生成随机数(n下限,m上限)

    function rnd(n,m){
        return parseInt(Math.random()*(m-n)+n)
    }
    

    在数组中查重

    function findInArr(num,arr){
        for(var i=0;i<arr.length;i++){
            if(arr[i] == num){
                return true;
            }
        };
        return false;
    }
    

    数组去重

    4种算法:
    1.Array.prototype.unique1 = function(){
        var n = []; //一个新的临时数组
        for(var i = 0; i < this.length; i++) //遍历当前数组
        {
            //如果当前数组的第i已经保存进了临时数组,那么跳过,
            //否则把当前项push到临时数组里面
            if (n.indexOf(this[i]) == -1) n.push(this[i]);
        }
        return n;
    }
    
    2.Array.prototype.unique2 = function(){
        var n = {},r=[]; //n为hash表,r为临时数组
        for(var i = 0; i < this.length; i++) //遍历当前数组
        {
            if (!n[this[i]]) //如果hash表中没有当前项
            {
                n[this[i]] = true; //存入hash表
                r.push(this[i]); //把当前数组的当前项push到临时数组里面
            }
        }
        return r;
    }
    
    3.Array.prototype.unique3 = function(){
        var n = [this[0]]; //结果数组
        for(var i = 1; i < this.length; i++) //从第二项开始遍历
        {
            //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
            //那么表示第i项是重复的,忽略掉。否则存入结果数组
            if (this.indexOf(this[i]) == i) n.push(this[i]);
        }
        return n;
    }
    
    4.Array.prototype.unique4 = function()
    {
        this.sort();
        var re=[this[0]];
        for(var i = 1; i < this.length; i++)
        {
            if( this[i] !== re[re.length-1])
            {
                re.push(this[i]);
            }
        }
        return re;
    }
    

    去空格函数

    //供使用者调用 
    function trim(s){ 
    return trimRight(trimLeft(s)); 
    } 
    //去掉左边的空白 
    function trimLeft(s){ 
    if(s == null) { 
    return ""; 
    } 
    var whitespace = new String(" \t\n\r"); 
    var str = new String(s); 
    if (whitespace.indexOf(str.charAt(0)) != -1) { 
    var j=0, i = str.length; 
    while (j < i && whitespace.indexOf(str.charAt(j)) != -1){ 
    j++; 
    } 
    str = str.substring(j, i); 
    } 
    return str; 
    } 
    //去掉右边的空白 
    function trimRight(s){ 
    if(s == null) return ""; 
    var whitespace = new String(" \t\n\r"); 
    var str = new String(s); 
    if (whitespace.indexOf(str.charAt(str.length-1)) != -1){ 
    var i = str.length - 1; 
    while (i >= 0 && whitespace.indexOf(str.charAt(i)) != -1){ 
    i--; 
    } 
    str = str.substring(0, i+1); 
    } 
    return str; 
    } 
    
    正则实现:
    <script type="text/javascript">  
      //去左空格;   
     function ltrim(s){     
        return s.replace(/(^\s*)/, "");  
     }   
     //去右空格;   
    function rtrim(s){   
      return s.replace(/(\s*$)/, "");  
    }   
     //去左右空格;   
     function trim(s){  
       //s.replace(/(^\s*)|(\s*$)/, "");  
      return rtrim(ltrim(s));   
     
     }   
     
     
    如果是去掉半角和全角空格就把 \s 替换成 [' '|' '] 就变成  
    //去左空格;  
    function ltrim(s){  
    return s.replace(/(^[' '|' ']*)/, '');  
    }  
    //去右空格;  
    function rtrim(s){  
    return s.replace(/([' '|' ']*$)/, '');  
     
     
    function show(a){  
        var f = trim(a)  
        alert(f);  
        alert(f.length);  
     }  
     
    </script>  
    <input type="text" id="admin" onblur="show(this.value)"/> 
    

    补零函数

    function toDou(n){
        return n<10? '0'+n : ''+n;
    }
    

    某个对象添加Class

    function addClass(obj,ClassName){
        if(obj.className == ''){
            obj.className = ClassName;
        } else{
            var arrClassName = obj.className.split(' ');
            var _index = arrIndexof(arrClassName,ClassName);
            if(_index == -1){
                obj.className += ' '+ ClassName;
            }
        }
    }
    

    某个对象移除Class

    function removeClass(obj,ClassName){
        if(obj.className != ''){
            var arrClassName = obj.className.split(' ');
            var _index = arrIndexof(arrClassName,ClassName);
            if( _index != -1 ){
                arrClassName.splice(_index,1);
                obj.className = arrClassName.join(' ');
            }
        }
    }
    

    在当前class数组中查找是否存在

    function arrIndexof(arr,v){
        for(var i=0;i<arr.length;i++){
            if(arr[i] == v){
                return i;
            }
        }
        return -1;
    }
    

    通过className获取元素(parent父级,ClassName要获取的class名称)

    function getClassName(parent,ClassName){
        if (document.getElementsByClassName){
            return parent.getElementsByClassName(ClassName);
        } else {
            var aEls = parent.getElementsByTagName('*');
            var arr = [];
            for (var i=0;i<aEls.length;i++){
                var aClassName = aEls[i].className.split(' ');
                for(var k=0;k<aClassName.length;k++){
                    if (aClassName[k] == ClassName){
                        arr.push(aEls[i]);
                    }
                }
            }
         return arr;
        }
    }
    

    获取一个字符串字节长度(str为要获取的字符串,type为'gbk''gb2312')

    function getByLen(str,type){
        var len = 0;
        for (var i=0;i<str.length;i++){
            if(str.charAt(i)>='\u4e00' && str.charAt(i)<='\u9fa5'){
                if(type == 'gbk' || type == 'gb2312'){
                    len+=2;
                } else {
                    len+=3;
                }
            } else {
                len++;
            }
        }
        return len;
    }
    

    获取元素到页面的绝对距离(无论有没有,有多少定位父级)

    function getPos(obj){
        var x = 0;
        var y = 0;
        while (obj){
            x += obj.offsetLeft;
            y += obj.offsetTop;
            obj = obj.offsetParent;     //图片懒加载最高定位到父级为body
        }
        return {left:x,top:y};
    }
    

    事件绑定

    function addEvent(obj,oEvn,fn){
        if (obj.addEventListener) {
            obj.addEventListener(oEvn,fn, false);
        } else{
            obj.attachEvent('on' + oEvn,function(){
                fn.call(obj);
            });
        }
    }
    

    解除事件绑定(无法解除匿名函数)

    function removeEvent(obj,oEvn,fn){
        if(obj.removeEventListener){
            obj.removeEventListener(oEvn, fn, false);
        }else{
            obj.detachEvent('on' + oEvn,function(){
                fn.call(obj);
            });
        }
    }
    

    鼠标滚轮事件 滚轮事件不支持chrome,兼容事件

    处理兼容:   
    if(window.navigator.userAgent.indexOf('Firefox')!=-1){
        oBox.addEventListener('DOMMouseScroll',function(){
            alert('火狐滚轮事件');
        },false);
    }else{
        oBox.onmousewheel=function(){
            alert('其他浏览器滚轮事件');
        };
    }
    function addWheel(obj,fn){
        if (window.navigator.userAgent.toLowerCase().indexOf('firefox') != -1){
            obj.addEventListener('DOMMouseScroll',wheel,false);
    
        } else {
            addEvent(obj,'mousewheel',wheel);
        }
        function  wheel(ev){
            var oEvent = ev || event;
            var bDown = true;//假设鼠标向下滚动为true
            if(oEvent.wheelDelta){
                if(oEvent.wheelDelta > 0){//Chrome、IE系列
                    bDown = false;//向下
                } else {
                    bDown = true;//向上
                }
            } else {
                if(oEvent.detail < 0 ){//FF
                    bDown = false;//向上
                } else {
                    bDown = true;//向下
                }
            }
            fn && fn(bDown);
            oEvent.preventDefault && oEvent.preventDefault();
            return false;
        }
    }
    window.onload = function () {
        var oBox = document.getElementById('box');
        addWheel(oBox,function(bDown){
            if (bDown) {
                alert(1);
            }else {
                alert(2);
            }
        })
    }
    //domReady(替代window.onload)  如何兼容浏览器
    function domReady(fn){
        if(document.addEventListener){
            document.addEventListener('DOMContentLoaded',function(){//高版本浏览器
                fn&&fn();
            },false);
        }else {
            document.onreadystatechange = function(){
                if (document.readyState == 'complete'){   //低级浏览器中运行 (传输的不仅是数据而json传输数据)
                    fn&&fn();
                }
            }
        }
    

    }

    相关文章

      网友评论

          本文标题:JavaScript常见函数

          本文链接:https://www.haomeiwen.com/subject/ycsrvttx.html