var ns = window.ns_url; /* 基础对象检测 */ ns || $.error("js-ns_url基础配置没有正确加载!"); /** * 解析URL * @param {string} url 被解析的URL * @return {object} 解析后的数据 */ ns.parse_url = function (url) { var parse = url.match(/^(?:([a-z]+):\/\/)?([\w-]+(?:\.[\w-]+)+)?(?::(\d+))?([\w-\/]+)?(?:\?((?:\w+=[^#&=\/]*)?(?:&\w+=[^#&=\/]*)*))?(?:#([\w-]+))?$/i); parse || $.error("url格式不正确!"); return { "scheme": parse[1], "host": parse[2], "port": parse[3], "path": parse[4], "query": parse[5], "fragment": parse[6] }; } ns.parse_str = function (str) { var value = str.split("&"), vars = {}, param; for (val in value) { param = value[val].split("="); vars[param[0]] = param[1]; } return vars; } ns.parse_name = function (name, type) { if (type) { /* 下划线转驼峰 */ name = name.replace(/_([a-z])/g, function ($0, $1) { return $1.toUpperCase(); }); /* 首字母大写 */ name = name.replace(/[a-z]/, function ($0) { return $0.toUpperCase(); }); } else { /* 大写字母转小写 */ name = name.replace(/[A-Z]/g, function ($0) { return "_" + $0.toLowerCase(); }); /* 去掉首字符的下划线 */ if (0 === name.indexOf("_")) { name = name.substr(1); } } return name; } //scheme://host:port/path?query#fragment ns.url = function (url, vars, suffix) { var info = this.parse_url(url), path = [], param = {}, reg; /* 验证info */ info.path || $.error("url格式错误!"); url = info.path; /* 解析URL */ path = url.split("/"); path = [path.pop(), path.pop(), path.pop()].reverse(); path[1] = path[1] || this.route[1]; path[0] = path[0] || this.route[0]; // param[this.route[0]] = path[0]; // param[this.route[1]] = path[1]; // param[this.route[2]] = path[2].toLowerCase(); // url = param[this.route[0]] + '/' + param[this.route[1]] + '/' + param[this.route[2]]; param[this.route[2]] = path[0]; param[this.route[3]] = path[1]; param[this.route[4]] = path[2].toLowerCase(); url = param[this.route[2]] + '/' + param[this.route[3]] + '/' + param[this.route[4]]; /* 解析参数 */ if (typeof vars === "string") { vars = this.parse_str(vars); } else if (!$.isPlainObject(vars)) { vars = {}; } /* 添加伪静态后缀 */ if (false !== suffix) { suffix = suffix || 'html'; if (suffix) { url += "." + suffix; } } /* 解析URL自带的参数 */ info.query && $.extend(vars, this.parse_str(info.query)); /* 判断站点id是否存在 */ var site = ''; if (vars.site_id) { var site_id = vars.site_id; delete vars.site_id; site = 's' + parseInt(site_id) + '/'; } else { var site_id = this.route[0]; site = site_id > 0 ? 's' + parseInt(site_id) + '/' : ''; } var addon = ''; if (info.scheme != '' && info.scheme != undefined) { addon = info.scheme + '/'; } url = site + addon + url; if (vars) { var param_str = $.param(vars); if ('' !== param_str) { url += ((this.baseUrl + url).indexOf('?') !== -1 ? '&' : '?') + param_str; } } url = this.baseUrl + url; return url; } /** * 处理图片路径 */ ns.img = function (path, type = '') { if (path.indexOf("http://") == -1 && path.indexOf("https://") == -1) { var start = path.lastIndexOf('.'); type = type ? '_' + type : ''; var base_url = this.baseUrl.replace('/?s=', ''); var suffix = path.substring(start); var path = path.substring(0, start); var true_path = base_url + 'attachment/' + path + type + suffix; } else { var true_path = path; } return true_path; } /** * 时间戳转时间 * */ ns.time_to_date = function (timeStamp) { if (timeStamp > 0) { var date = new Date(); date.setTime(timeStamp * 1000); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h = date.getHours(); h = h < 10 ? ('0' + h) : h; var minute = date.getMinutes(); var second = date.getSeconds(); minute = minute < 10 ? ('0' + minute) : minute; second = second < 10 ? ('0' + second) : second; return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second; } else { return ""; } } /** * url 反转义 * @param url */ ns.urlReplace = function (url) { var new_url = url.replace(/%2B/g, "+");//"+"转义 new_url = new_url.replace(/%26/g, "&");//"&" new_url = new_url.replace(/%23/g, "#");//"#" new_url = new_url.replace(/%20/g, " ");//" " new_url = new_url.replace(/%3F/g, "?");//"#" new_url = new_url.replace(/%25/g, "%");//"#" new_url = new_url.replace(/&3D/g, "=");//"#" new_url = new_url.replace(/%2F/g, "/");//"#" return new_url; }