JavaScript常见函数

兼容获取非行间样式

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

数组去重

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; 
} 

正则实现:
  
 

补零函数

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

通过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

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

function getByLen(str,type){
    var len = 0;
    for (var i=0;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常见函数)