作为程序员一定要保持良好的睡眠,才能好编程

我的javascript库

发布时间:2017-03-14

Array.prototype.indexOf=function (w)
{
    for(var i=0;i<this.length;i++)if(this[i]==w)return i;
    return -1;
};

Array.prototype.remove=function (w)
{
    var n=this.indexOf(w);
    if(n!=-1)this.splice(n,1);
};

Array.prototype.append=function (aAny)
{
    for(var i=0,len=aAny.length;i<len;i++)
        this.push(aAny[i]);

    return this;
};

function getPos(obj){
    var res={l: 0, t: 0};

    while(obj)
    {
        res.l+=obj.offsetLeft||0;
        res.t+=obj.offsetTop||0;

        obj=obj.offsetParent;
    }

    return res;
}

function getByClass(oParent, sClass)
{
    var aEle=oParent.getElementsByTagName('*');
    var re=new RegExp('\\b'+sClass+'\\b', 'i');
    var aResult=[];

    for(var i=0;i<aEle.length;i++)
    {
        if(re.test(aEle[i].className))
        {
            aResult.push(aEle[i]);
        }
    }

    return aResult;
}

function addClass(obj, sClass)
{
    var re=new RegExp('\\b'+sClass+'\\b');

    if(re.test(obj.className))return;
    obj.className=(obj.className+' '+sClass).match(/\S+/g).join(' ');
}

function removeClass(obj, sClass)
{
    var re=new RegExp('\\b'+sClass+'\\b', 'g');

    obj.className=obj.className.replace(re, '').replace(/^\s+|\s+$/g, '').replace(/\s+/g, ' ');
}
//绑定事件
function bindEvent(obj, ev, fn)
{
    obj.addEventListener?obj.addEventListener(ev, fn, false):obj.attachEvent('on'+ev, fn);
}
//解除事件
function unbindEvent(obj, ev, fn)
{
    obj.removeEventListener?obj.removeEventListener(ev, fn, false):obj.detachEvent('on'+ev, fn);
}
//cookie
function setCookie(name, value, iDay)
{
    if(iDay!==false)
    {
        var oDate=new Date();
        oDate.setDate(oDate.getDate()+iDay);

        document.cookie=name+'='+value+';expires='+oDate+';path=/';
    }
    else
    {
        document.cookie=name+'='+value;
    }
}

function getCookie(name)
{
    var arr=document.cookie.split('; ');
    var i=0;

    for(i=0;i<arr.length;i++)
    {
        var arr2=arr[i].split('=');

        if(arr2[0]==name)
        {
            return arr2[1];
        }
    }

    return '';
}

function removeCookie(name)
{
    setCookie(name, 'a', -1);
}

//打字效果
 
   function typing(){
   var str = 'js 实现的 打字效果,感觉蛮有趣的。';   var i = 0;
    var divTyping = document.getElementById('divTyping');
    if (i <= str.length) {
     divTyping.innerHTML = str.slice(0, i++) + '_';
     setTimeout('typing()', 200);//递归调用
    }
    else{
     divTyping.innerHTML = str;//结束打字,移除 _ 光标
    }
   }
   typing();

   //打字效果结束

//获取元素
function getEle(sExp, oParent)
{
    var aResult=[];
    var i=0;

    oParent || (oParent=document);

    if(oParent instanceof Array)
    {
        for(i=0;i<oParent.length;i++)aResult=aResult.concat(getEle(sExp, oParent[i]));
    }
    else if(typeof sExp=='object')
    {
        if(sExp instanceof Array)
        {
            return sExp;
        }
        else
        {
            return [sExp];
        }
    }
    else
    {
        //xxx, xxx, xxx
        if(/,/.test(sExp))
        {
            var arr=sExp.split(/,+/);
            for(i=0;i<arr.length;i++)aResult=aResult.concat(getEle(arr[i], oParent));
        }
        //xxx xxx xxx 或者 xxx>xxx>xxx
        else if(/[ >]/.test(sExp))
        {
            var aParent=[];
            var aChild=[];

            var arr=sExp.split(/[ >]+/);

            aChild=[oParent];

            for(i=0;i<arr.length;i++)
            {
                aParent=aChild;
                aChild=[];
                for(j=0;j<aParent.length;j++)
                {
                    aChild=aChild.concat(getEle(arr[i], aParent[j]));
                }
            }

            aResult=aChild;
        }
        //#xxx .xxx xxx
        else
        {
            switch(sExp.charAt(0))
            {
                case '#':
                    return [document.getElementById(sExp.substring(1))];
                case '.':
                    return getByClass(oParent, sExp.substring(1));
                default:
                    return [].append(oParent.getElementsByTagName(sExp));
            }
        }
    }
    return aResult;
}

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

//ajax、表单之类的
function json2url(json)
{
    var a=[];
    for(var i in json)
    {
        var v=json[i]+'';
        v=v.replace(/\n/g, '<br/>');
        v=encodeURIComponent(v);
        a.push(i+'='+v);
    }
    return a.join('&');
}

function ajax(url, opt)
{
    opt            =opt||{};
    opt.data    =opt.data||{};
    opt.data.t    =opt.data.t||new Date().getTime();
    opt.method    =opt.method||'get';

    var oAjax=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");

    if(opt.method=='post')
    {
        oAjax.open('POST', url, true);
        oAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        try{
            oAjax.send(opt.data?json2url(opt.data):null);
        }catch(e){}
    }
    else
    {
        url+='?'+json2url(opt.data);
        oAjax.open('GET', url, true);
        try{
            oAjax.send();
        }catch(e){}
    }

    oAjax.onreadystatechange=function ()
    {
        if(oAjax.readyState==4)
        {
            if(oAjax.status==200)
            {
                opt.fnSucc && opt.fnSucc(oAjax.responseText);
            }
            else
            {
                opt.fnFaild && opt.fnFaild(oAjax.status);
            }
        }
    };
}

/*
options:
succ:    function(json)
faild:    function(str, err)
check:    function(obj, name, value)
data:    额外的数据
*/
function postForm(oForm, options)
{
    if(!options)options={};

    oForm.onsubmit=function ()
    {
        var data={};
        var aEle=oForm.getElementsByTagName('*');

        for(var i=0;i<aEle.length;i++)
        {
            var name=aEle[i].name;
            var value=aEle[i].value;

            if(name)
            {
                if(aEle[i].type=='radio')
                {
                    if(aEle[i].checked)
                    {
                        if(options.check && options.check(aEle[i], name, value)==false)return false;
                        data[name]=value;
                    }
                }
                else if(aEle[i].type!=undefined)
                {
                    if(options.check && options.check(aEle[i], name, value)==false)return false;
                    data[name]=value;
                }
            }
        }

        if(options.data)
        {
            for(var i in options.data)data[i]=options.data[i];
        }

        request(oForm.action, data, options.succ, options.faild);

        return false;
    };
}

function request(url, data, fnSucc, fnFaild)
{
    ajax(url, {
        data: data,
        fnSucc: function (str){
            //alert(str);
            //document.write(str);
            //document.getElementsByTagName('textarea')[0].value=str;
            try{
                str=str.replace(/\n/g, '');
                var json=eval('('+str+')');
            }
            catch(e)
            {
                fnFaild && fnFaild('parse error', -1);

                //alert('你懂的:'+str);
                var oDiv=document.getElementById('test_err_ndd');
                if(!oDiv)
                {
                    oDiv=document.createElement('div');
                    document.body.appendChild(oDiv);
                    oDiv.style.display='none';
                }

                oDiv.innerHTML+=str;
                return;
            }

            if(json.error)
                fnFaild&&fnFaild(json.desc, json.error);
            else
                fnSucc&&fnSucc(json);
        },
        fnFaild: function (str){
            fnFaild&&fnFaild(str+'|'+url);
        }
    });
}


function time2date(t)
{
    function d(n){return n<10?'0'+n:''+n;}

    var oDate=new Date(t*1000);

    return oDate.getFullYear()+'-'+d(oDate.getMonth()+1)+'-'+d(oDate.getDate())+' '+d(oDate.getHours())+':'+d(oDate.getMinutes())+':'+d(oDate.getSeconds());
}

function time2day(t)
{
    function d(n){return n<10?'0'+n:''+n;}

    var oDate=new Date(t*1000);

    return oDate.getFullYear()+'-'+d(oDate.getMonth()+1)+'-'+d(oDate.getDate());
}


function preloadImgs(arr, fnSucc, fnFaild, fnProgress)
{
    var loaded=0;
    for(var i=0;i<arr.length;i++)
    {
        var oImg=new Image();

        oImg.onload=function ()
        {
            loaded++;

            fnProgress&&fnProgress(100*loaded/arr.length);

            if(loaded==arr.length)fnSucc&&fnSucc();

            this.onload=this.onerror=null;
            this.src='';
        };

        oImg.onerror=function ()
        {
            fnFaild&&fnFaild(this.src);

            fnFaild=fnSucc=fnProgress=null;
        };

        oImg.src=arr[i];
    }
}

//拖拽
function drag(objEv, objMove, fnMoveCallBack)
{
    var disX=0,disY=0;

    objEv.onmousedown=function (ev)
    {
        var oEvent=ev||event;
        disX=(document.documentElement.scrollLeft||document.body.scrollLeft)+oEvent.clientX-objMove.offsetLeft;
        disY=(document.documentElement.scrollTop||document.body.scrollTop)+oEvent.clientY-objMove.offsetTop;

        if(objEv.setCapture)
        {
            objEv.onmousemove=fnMove;
            objEv.onmouseup=fnUp;

            objEv.setCapture();
        }
        else
        {
            document.onmousemove=fnMove;
            document.onmouseup=fnUp;

            return false;
        }
    };

    function fnMove(ev)
    {
        var oEvent=ev||event;
        var l=(document.documentElement.scrollLeft||document.body.scrollLeft)+oEvent.clientX-disX;
        var t=(document.documentElement.scrollTop||document.body.scrollTop)+oEvent.clientY-disY;

        fnMoveCallBack(l,t);
    }

    function fnUp()
    {
        this.onmousemove=null;
        this.onmouseup=null;

        if(this.releaseCapture)this.releaseCapture();
    }
}


function mouseScroll(obj, fnCallBack)
{
    bindEvent(obj, 'mousewheel', fnScroll);
    bindEvent(obj, 'DOMMouseScroll', fnScroll);

    function fnScroll(ev)
    {
        var oEvent=ev||event;
        var bDown;

        if(oEvent.wheelDelta)
        {
            bDown=oEvent.wheelDelta<0;
        }
        else
        {
            bDown=oEvent.detail>0;
        }

        fnCallBack(bDown);

        if(oEvent.preventDefault)oEvent.preventDefault();
        return false;
    }
}

function format(str, json)
{
    str=str.replace(/{\w+}/g, function (str){
        var s=str.substring(1, str.length-1);

        return json[s];
    });

    return str;
}



//获取屏幕大小
function getWindowSize(){
    var width=document.documentElement.clientWidth||document.body.clientWidth;
    var height=document.documentElement.clientHeight||document.body.clientHeight;
    return {"h":height,"w":width};                    
 }