js 常用函數

/*
*Author:趙少邦
*Date:2014-5-22
*/

//-----------------------深度克隆對象--------------------------
function cloneObject(obj){
    var cloneObj;
    cloneObj=(obj instanceof Array) ? []:{}; //判斷對象類型,新建克隆對象
    for(var i in obj){
        if(obj.hasOwnProperty(i)){
            cloneObj[i]=(obj instanceof Array) ? cloneObject(obj[i]):obj[i];
        }
    }
    return cloneObj;
}


//------------------------ 數組去重----------------------------
function uniqArray(ary)
{
    var obj={};
    var result=[];
    for (var i = 0; i < ary.length; i++) {
        if (ary[i] && !obj[ary[i]]) {
            obj[ary[i]]=1;
            result.push(ary[i]);
        };
    };
    return result;
}

//-----------------------trim函數,去除字符串空格-----------------------
function trim(str){
    for (var i = 0; i < str.length; i++) {
        if(str.charAt(i)!=" " && str.charAt(i)!="   "){
            break;
        }
    };
    var str1=str.substring(i,str.length);

    for (var j = str1.length-1; j >=0; j--) {
        if(str1.charAt(j)!=" " && str1.charAt(j)!="   "){
            break;
        }
    };
    var str2=str1.substring(0,j+1);
    return str2;
} 

//------------------------遍歷數組---------------------------
function each(ary,fn){
    for (var i = 0; i < ary.length; i++) {
        fn(ary[i],i);
    };
}

//-----------------獲取對象元素長度----------------
function getObjectLength(obj){
    var num=0;
    for(var i in obj){
        num++;
    }
    return num;
}

 //---------------------------------爲element添加樣式newClassName-----------------------------
function addClass(element,newClassName){
    var oldClass=element.className.split(" ");
    for (var i = 0; i < oldClass.length; i++) {
        if(oldClass[i]==newClassName)
            return;
    };
    oldClass.push(newClassName);
    oldClass.join(" ");
}

 //--------------------爲element移除樣式oldClassName--------------------------------
function removeClass(element,oldClassName){
    var newClassNames=[];
    var classNames=element.className.split(" ");
    for (var i = 0; i < classNames.length; i++) {
        if(classNames[i]==oldClassName){
            continue;
        }
        newClassNames.push(classNames[i]);
    };
    element.className=newClassNames.join(" ");
}

//--------------判斷siblingNode和element是否爲同一個父元素下的同一級的元素--------------------------
function isSiblingNode(element,siblingNode){
    if(element.parentNode===siblingNode.parentNode)
        return true;
    else
        return false;
}

// -----------------獲取element相對於瀏覽器窗口的位置,返回一個對象{x, y}-----------------------
function getPosition(element) {
    var obj=element.getBoundingClientRect();
    var x=obj.left;
    var y=obj.top;
    return {"x":x,"y":y};
}

//----------------------獲取相鄰的下一個兄弟節點的兼容寫法---------------------
function nextSibling(curvObj) {  

      /** 
       * 1 元素節點  
       * 2屬性 
       * 3文本 
       * 8註釋 
       * 9document 
       */   
    var currentNode = curvObj.nextSibling;  

    if ( currentNode.nodeType == 1 ) {  
      return currentNode;  
    }  

    return nextSibling(currentNode);  
}  

//--------------------------- 給一個element綁定一個針對event事件的響應,響應函數爲listener----------------------------------------
function addEvent(element,event,listener){
    if (window.addEventListener) {
        element.addEventListener(event,listener,false);
    }
    else{
        element.attachEvent("on"+event,listener);
    }
}

// 刪除事件偵聽
function removeEvent(element,event,listener){
    if (window.addEventListener) {
        element.removeEventListener(event,listener);
    }
    else{
        element.detachEvent("on"+event,listener);
    }
}

// 實現對click事件的綁定
function addClickEvent(element, listener) {
    if (window.addEventListener) {
        element.addEventListener('click',listener,false);
    }
    else{
        element.attachEvent('onclick',listener);
    }
}

// 實現對於按Enter鍵時的事件綁定
function addEnterEvent(element, listener) {
     if (window.addEventListener) {
        element.addEventListener('keydown',keyFun,false);

    }
    else{
        element.attachEvent('onkeydown',keyFun);
    }
    function keyFun(e){
        var e=e || window.event;
        if(e.keyCode==13){
            listener();
        }
    }
}

//  事件代理
function delegateEvent(element, tag, eventName, listener) {
    addEvent(element,eventName,delegateFun);
    function delegateFun(e){
        var e=e || window.event;
        var target=e.target || e.srcElement;
        if(target.nodeName.toLowerCase()==tag){
            listener.apply(target,arguments);
        }
    }

}

// 實現一個簡單的Query
function $(selector) {
   return document.querySelector(selector);
}



// 設置cookie
function setCookie(cookieName, cookieValue, expiredays) {
    var date=new Date();
    date.setDate(date.getDate()+expiredays);
    document.cookie=cookieName+'='+cookieValue+'; expries='+((expiredays==null) ? "":date.toGMTString())+'; path=/';
}

// 獲取cookie值
function getCookie(cookieName) {
    var cookies=document.cookie.split(';');
    for (var i = 0; i < cookies.length; i++) {
        var userData=cookies[i].split('=');
        if (userData[0]==cookieName) {
            return userData[1];
        };
    };
    return '';
}

// ajax封裝函數
function ajax(url,options,type){
    var oAjax=null;
    var type=type || "GET";
    //alert(type);
    if(window.XMLHttpRequest){
        oAjax=new XMLHttpRequest();

    }
    else{
        oAjax=new ActiveXObject('Microsoft.XMLHTTP');
    }

    oAjax.onreadystatechange=function(){
        if (oAjax.readyState==4) {
            if (oAjax.status==200) {
                options.onsuccess(oAjax.responseText);
            } 
            else{
                options.onfail();
            };
        };
    }

    url=url+"?name="+options.data.name+"&password="+options.data.password+"&t="+Math.random();
    oAjax.open(type,url,true);
    oAjax.send();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章