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

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容