javascript 常用函数归纳

来源:互联网 发布:李连杰眼睛 知乎 编辑:程序博客网 时间:2024/05/16 07:33


    /*      * 序列化      * */     var serialize = function(json){         var str = '';         for(var attr  in json){             str +=  attr + '=' +json[attr] + '&';         }         return str.substr(0,str.length-1);     }     /*      * 遍历元素      * callback 会传入index,el 当前元素      * this指向当前对象      * */     var each = function(array,callback){         if (Object.prototype.toString.call(array) !== '[object Array]') return;         for(var i= 0,len = array.length;i<len;i++){             callback.call(array[i],i,array[i]);         }     }     /*     * 数据排序-按中文拼音字母     * */     var dataSort = function(data){        return data.sort(function(a,b){            return a.msg.localeCompare(b.msg);        })     }


/*      * ajax 封装      * */     var  ajax = function(config){         var xhr = window.XMLHttpRequest ?             new XMLHttpRequest() :             new ActiveXObject('Microsofr.XMLHTTP');         xhr.onreadystatechange = function(){             if(xhr.readyState == 4 && xhr.status == 200){                 config.success && config.success(xhr);             }         }         if(config.method){             xhr.open(config.method,config.url,true);             config.method == 'get' ?                 xhr.send() :                 (xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"),                     xhr.send(serialize(config.data)));         }     };



//获取元素的纵坐标function getTop(e) {var offset = e.offsetTop;if (e.offsetParent != null) offset += arguments.callee(e.offsetParent);return offset;}//获取元素的横坐标function getLeft(e) {var offset = e.offsetLeft;if (e.offsetParent != null) offset += arguments.callee(e.offsetParent);return offset;}


一、将noedeList对象转换成数组

伪数组nodeList,不能直接使用数组方法slice()

var arrify = function(list){<span style="white-space:pre"></span>return Array.prototype.slice.call(list);}


一、去掉一个字符串的首尾空格

function trim(s){<span style="white-space:pre"></span>return s.replace(/(^\s*)|(\s*$)/g,"");//正则表达式,去掉首尾空格}


一、得到一个字符串的字节长度

function getBytesLength(str){            var len = str.length;            for (var i = 0; i < str.length; i++) {                if(str.charCodeAt(i) > 255){    //unicode 字符编码,中文都是>255的                    len++;                }            }            return len;        }


一、得到dom对象的某css属性

function getStyle(obj,attr){    if(obj.currentStyle){        return obj.currentStyle[attr];    }else    {        return getComputedStyle(obj,false)[attr];    }}
二、按class查找dom对象集合

function getByClass(oParent,sClass){    var aEle = oParent.getElementsByTagName('*');    var results = [];    for (var i = 0; i < aEle.length; i++) {        var obj = aEle[i];        if(obj.className == sClass){            results.push(obj);        }    }    return results;}

三、给某dom对象设置css属性集

function setStyle(obj,json){    for(var atrr in json){        obj.style[atrr] = json[atrr];    }}



一、检测浏览器类型

  function userBrowser(){            var browserName=navigator.userAgent.toLowerCase();            if(/msie/i.test(browserName) && !/opera/.test(browserName)){                alert("IE");                return ;            }else if(/firefox/i.test(browserName)){                alert("Firefox");                return ;            }else if(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName)){                alert("Chrome");                return ;            }else if(/opera/i.test(browserName)){                alert("Opera");                return ;            }else if(/webkit/i.test(browserName) &&!(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName))){                alert("Safari");                return ;            }else{                alert("unKnow");            }        }

二、对象克隆

//克隆有两种方法:一种是“浅克隆”,一种是“深克隆”(深度克隆)。        //浅克隆:基本类型为值传递,对象仍为引用传递。        //深克隆(深度克隆):所有元素均完全复制,并于原对象完全独立(原对象的修改不影响新对象)。        //深度克隆的代码如下(深克隆去掉递归即为浅克隆):        Object.prototype.clone = function () {            var o = this.constructor === Array ? [] : {};            for (var e in this) {                o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];            }            return o;        }

三、实现Hashtable

 function Hashtable(array)//自定义hashtable        {            this.length = 0;            this._hash = new Object();        }        Hashtable.prototype.put = function (key, value) {            if (typeof (key) != "undefined") {                if (this.containsKey(key) == false) {                    this._hash[key] = typeof (value) == "undefined" ? null : value;                    this.length++;                    return true;                } else {                    return false;                }            } else {                return false;            }        }        Hashtable.prototype.remove = function (key) {            if (this.containsKey(key)) {                delete this._hash[key];                this.length--;            }        };        Hashtable.prototype.size = function () {            return this.length;        };        Hashtable.prototype.get = function (key) {            return this._hash[key];        };        Hashtable.prototype.containsKey = function (key) {            return  (key in this._hash);//in可以用于检测属性是否存在        };        Hashtable.prototype.containsValue = function (value) {            for (var k in this._hash) {                if (this._hash[k] == value) {                    return true;                }            }            return false;        };        Hashtable.prototype.clear = function () {            for (var k in this._hash) {                delete this._hash[k];            }        };        Hashtable.prototype.keys = function () {            var keys = new Array();            for (var k in this._hash) {                keys.push(k);            }            return keys;        };        Hashtable.prototype.values = function () {            var values = new Array();            for (var k in this._hash) {                values.push(this._hash[k]);            }            return values;        };
四、将指定节点插入到 某节点之后

function insertAfter(newNode, targetNode) {            if (targetNode.parentNode.lastChild == targetNode) {                targetNode.parentNode.appendChild(newNode);            } else {                targetNode.parentNode.insertBefore(newNode, targetNode.nextSibling);            }        }

五、时间倒数计时程序

function time() {            var endtime = new Date("2014/04/01,23:06:30");            var nowtime = new Date();            //两时间差为毫秒数,除以1000则转换为秒数            var leftsecond = parseInt((endtime.getTime() - nowtime.getTime()) / 1000);            d = parseInt(leftsecond / (3600 * 24)); //计算出相差天数            h = parseInt((leftsecond / 3600) % 24); //计算出总小时,再取余(每过60小时,重新计算)            m = parseInt((leftsecond / 60) % 60); //计算出总分钟数,再取余            s = parseInt(leftsecond % 60); //直接取余            alert(d + '天' + h + "小时" + m + "分" + s + "秒");            //setTimeout(time,1000);//每个一秒刷新一次数据        }

六、去掉一个数组中的重复元素

function single(arry) {            var temp = [];            var result = [];            for (var i = 0; i < arry.length; i++) {                if (!temp[arry[i]]) {                    temp[arry[i]] = 1;                    result.push(arry[i]);                }            }            return result;        }

七、判断一个字符串中出现次数最多的字符,统计这个次数

function timecount(str) {            var hash = {};            for (var i = 0; i < str.length; i++) {                if (!hash[str[i]]) {                    hash[str[i]] = 1;                } else {                    hash[str[i]]++;                }            }            var maxkey, maxvalue = 0;            for (var temp in hash) {                if (hash[temp] > maxvalue) {                    maxkey = temp;                    maxvalue = hash[temp];                }            }            alert(maxkey + "/" + maxvalue);        }

八、把URL参数解析为一个对象

function parseQueryString(url){            var obj = {};            var temp1 = url.split('?');            if(temp1.length > 1){                obj['target'] = temp1[0];                var temp2 = temp1[1].split('&');                for (var i = 0; i < temp2.length; i++) {                    var aaa = temp2[i].split('=');                    obj[aaa[0]] = aaa[1];                }                return obj;            }else{                obj['target'] = url;                return obj;            }        }

九、跨浏览器控制台日志打印

function log(message){    if(typeof console =='object'){        console.log(message);    }else if(typeof opera == 'object'){        opera.postError(message);    }else if(typeof java == 'object' && typeof  java.lang =='object'){        java.lang.System.out.println(message);    }}

十、跨浏览器得到选择的文本

function getSelectedText(textbox){    if(document.selection){        return document.selection.createRange().text;    }else{        return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);    }}

十一、跨浏览器选择部分文本

function selectText(textbox,startIndex,stopindex){    if(textbox.setSelectionRange()){        textbox.setSelectionRange(startIndex,stopindex);    }else if(textbox.createTextRange()){        var range = textbox.createTextRange();        range.collapse(true);        range.moveStart("character",startIndex);        range.moveEnd("character",stopindex-startIndex);        range.select();    }    textbox.focus();}



0 0