项目中经常使用的JS方法汇总,非常有用

// 对Date的扩展,将 Date 转化为指定格式的String  
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,  
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)  
// 例子:  
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423  
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18  
Date.prototype.format = function (fmt) { //author: meizz  
 var o = {
  "M+": this.getMonth() + 1,                 //月份  
  "d+": this.getDate(),                    //日  
  "h+": this.getHours(),                   //小时  
  "m+": this.getMinutes(),                 //分  
  "s+": this.getSeconds(),                 //秒  
  "q+": Math.floor((this.getMonth() + 3) / 3), //季度  
  "S": this.getMilliseconds()             //毫秒  
 };
 if (/(y+)/.test(fmt))
  fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
 for (var k in o)
  if (new RegExp("(" + k + ")").test(fmt))
   fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
 return fmt;
}

getPageRegion = function (pageidx, pagecount, buttonnum) {
 buttonnum = buttonnum || 5;
 var halfbuttonnum = Math.floor(buttonnum / 2);
 var start = pageidx - halfbuttonnum > 0 ? pageidx - halfbuttonnum : 0;
 var end = start + buttonnum > pagecount ? pagecount : start + buttonnum;
 start = end - buttonnum < 0 ? 0 : end - buttonnum;
 return { start: start, end: end, pageidx: pageidx, pagecount: pagecount, buttonnum: buttonnum };
}

parseString = function (obj) {
 switch (typeof (obj)) {
  case 'string':
   //return '"' + obj.replace(/(["file://])/g, '\\$1') + '"';
   return '"' + obj + '"';
  case 'array':
   return '[' + obj.map(parseString).join(',') + ']';
  case 'object':
   if (obj instanceof Array) {
    var strArr = [];
    var len = obj.length;
    for (var i = 0; i < len; i++) {
     strArr.push(parseString(obj[i]));
    }
    return '[' + strArr.join(',') + ']';
   } else if (obj == null) {
    return 'null';

   } else {
    var string = [];
    for (var property in obj) string.push(parseString(property) + ':' + parseString(obj[property]));
    return '{' + string.join(',') + '}';
   }
  case 'number':
   return obj;
  default:
   return obj;
 }
}

ajax = function (uri, data, callback) {
 $.ajax({
  type: "post",
  cache: false,
  url: uri,
  data: data,
  dataType: "json",
  contentType: "application/json",
  success: callback,
  error: function (res) { alert(res) }
 });
}

getQueryString = function (name) {
    var queryStrings = window.location.search.split('&');
    for (var i = 0; i < queryStrings.length; i++) {
        if (queryStrings[i].indexOf(name + "=") != -1)
            return queryStrings[i].substr(queryStrings[i].indexOf(name + "=") + name.length + 1, queryStrings[i].length);
    }
    return "";
}

logout = function () {
 ajax("/WebServices/WSLogin.asmx/Logout", {}, function (r) { location.href = "/Login.aspx" });
}

function encrypt(str, pwd) {
 if(pwd == null || pwd.length <= 0) {
  alert("Please enter a password with which to encrypt the message.");
  return null;
 }
 var prand = "";
 for(var i=0; i<pwd.length; i++) {
  prand += pwd.charCodeAt(i).toString();
 }
 var sPos = Math.floor(prand.length / 5);
 var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
 var incr = Math.ceil(pwd.length / 2);
 var modu = Math.pow(2, 31) - 1;
 if(mult < 2) {
  alert("Algorithm cannot find a suitable hash. Please choose a different password. \nPossible considerations are to choose a more complex or longer password.");
  return null;
 }
 var salt = Math.round(Math.random() * 1000000000) % 100000000;
 prand += salt;
 while(prand.length > 10) {
  prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
 }
 prand = (mult * prand + incr) % modu;
 var enc_chr = "";
 var enc_str = "";
 for(var i=0; i<str.length; i++) {
  enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));
  if(enc_chr < 16) {
   enc_str += "0" + enc_chr.toString(16);
  } else enc_str += enc_chr.toString(16);
  prand = (mult * prand + incr) % modu;
 }
 salt = salt.toString(16);
 while(salt.length < 8)salt = "0" + salt;
 enc_str += salt;
 return enc_str;
}

function decrypt(str, pwd) {
 if(str == null || str.length < 8) {
  alert("A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted.");
  return;
 }
 if(pwd == null || pwd.length <= 0) {
  alert("Please enter a password with which to decrypt the message.");
  return;
 }
 var prand = "";
 for(var i=0; i<pwd.length; i++) {
  prand += pwd.charCodeAt(i).toString();
 }
 var sPos = Math.floor(prand.length / 5);
 var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
 var incr = Math.round(pwd.length / 2);
 var modu = Math.pow(2, 31) - 1;
 var salt = parseInt(str.substring(str.length - 8, str.length), 16);
 str = str.substring(0, str.length - 8);
 prand += salt;
 while(prand.length > 10) {
  prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
 }
 prand = (mult * prand + incr) % modu;
 var enc_chr = "";
 var enc_str = "";
 for(var i=0; i<str.length; i+=2) {
  enc_chr = parseInt(parseInt(str.substring(i, i+2), 16) ^ Math.floor((prand / modu) * 255));
  enc_str += String.fromCharCode(enc_chr);
  prand = (mult * prand + incr) % modu;
 }
 return enc_str;
}

(function ($) {
    function raw(s) {
        return s;
    }

    function decoded(s) {
        return window.decode(s.replace(/\+/g, ' '));
    }

    function encode(s) {
        return window.encode(s);
    }

    function converted(s) {
        if (s.indexOf('"') === 0) {
            // This is a quoted cookie as according to RFC2068, unescape
            s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
        }
        try {
            return config.json ? JSON.parse(s) : s;
        } catch (er) { }
    }

    var config = $.cookie = function (key, value, options) {
        if (value !== undefined) {
            options = $.extend({}, config.defaults, options);

            if (typeof options.expires === 'number') {
                var days = options.expires, t = options.expires = new Date();
                t.setDate(t.getDate() + days);
            }

            value = config.json ? JSON.stringify(value) : String(value);
            return (document.cookie = [
    options.raw ? key : encode(key),
    '=',
    options.raw ? value : encode(value),
    options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
    options.path ? '; path=' + options.path : '',
    options.domain ? '; domain=' + options.domain : '',
    options.secure ? '; secure' : ''
            ].join(''));
        }

        // read
        var decode = config.raw ? raw : decoded;
        var cookies = document.cookie.split('; ');
        var result = key ? undefined : {};
        for (var i = 0, l = cookies.length; i < l; i++) {
            var parts = cookies[i].split('=');
            var name = decode(parts.shift());
            var cookie = decode(parts.join('='));

            if (key && key === name) {
                result = converted(cookie);
                break;
            }

            if (!key) {
                result[name] = converted(cookie);
            }
        }

        return result;
    };

    $.removeCookie = function (key, options) {
        if ($.cookie(key) !== undefined) {
            $.cookie(key, '', $.extend(options, { expires: -1 }));
            return true;
        }
        return false;
    };

    config.defaults = {};
})(jQuery);

(function (_) {
    var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    var base64DecodeChars = new Array(
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
  52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
  -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
  15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
  -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
  41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);

    _.encode = function (str) {
        var out, i, len;
        var c1, c2, c3;
        len = str.length;
        i = 0;
        out = "";
        while (i < len) {
            c1 = str.charCodeAt(i++) & 0xff;
            if (i == len) {
                out += base64EncodeChars.charAt(c1 >> 2);
                out += base64EncodeChars.charAt((c1 & 0x3) << 4);
                out += "==";
                break;
            }
            c2 = str.charCodeAt(i++);
            if (i == len) {
                out += base64EncodeChars.charAt(c1 >> 2);
                out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
                out += base64EncodeChars.charAt((c2 & 0xF) << 2);
                out += "=";
                break;
            }
            c3 = str.charCodeAt(i++);
            out += base64EncodeChars.charAt(c1 >> 2);
            out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
            out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
            out += base64EncodeChars.charAt(c3 & 0x3F);
        }
        return out;
    }

    _.decode = function (str) {
        var c1, c2, c3, c4;
        var i, len, out;
        len = str.length;
        i = 0;
        out = "";
        while (i < len) {

            do {
                c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
            } while (i < len && c1 == -1);
            if (c1 == -1)
                break;

            do {
                c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
            } while (i < len && c2 == -1);
            if (c2 == -1)
                break;
            out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

            do {
                c3 = str.charCodeAt(i++) & 0xff;
                if (c3 == 61)
                    return out;
                c3 = base64DecodeChars[c3];
            } while (i < len && c3 == -1);
            if (c3 == -1)
                break;
            out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));

            do {
                c4 = str.charCodeAt(i++) & 0xff;
                if (c4 == 61)
                    return out;
                c4 = base64DecodeChars[c4];
            } while (i < len && c4 == -1);
            if (c4 == -1)
                break;
            out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
        }
        return out;
    }
})(window);

 

 

以上内容可以直接拷贝到一个.js文件中,作为外部js文件使用,前提是必须先引用jquery.js文件,

以上代码已包含jquery的cookie的实现代码,如需要用jquery方式来保存并使用cookie,示例如下:

//前台生成的cookie,如果需要后台使用,则必须加上

path: "/", raw: true 这2个选项,如:

$.cookie("user_mobile", $("#loginMobile").val(), { expires: 1, path: "/", raw: true });

后天获取时,代码如下:

if (Request.Cookies["user_mobile"] != null)
            {
                Mobile = Request.Cookies["user_mobile"].Value;
            }

前台生成cookie,前台获取使用时,不能设置 raw: true, 代码如下:
$.cookie("user_mobile_js", $("#loginMobile").val(), { expires: 1, path: "/" });

前台获取Cookie时代码如下:

mobile = $.cookie("user_mobile_js");

 

删除某个cookie时,代码如下:

$.cookie("user_mobile_js", null, { expires: -1, path: "/" });
$.cookie("user_mobile", null, { expires: -1, path: "/" });

 

调用ajax异步方法时:

ajax("/WebService/WebService1.asmx/LoginIn", parseString({ Mobile: mobile, Password: pwd }), function(data){...});

posted on 2014-11-14 14:17  itjeff  阅读(430)  评论(0编辑  收藏  举报

导航