//字符串带参格式化 string.format = function (str) { for (var i = 1; i < arguments.length; i++) { var reg = new regexp("\\{" + (i-1) + "\\}", "g"); str = str.replace(reg, arguments[i] ? arguments[i] : ""); } return str; } string.prototype.format = function () { return string.format.apply(null, [this].concat(array.prototype.slice.apply(arguments))); } //字符串重复 string.replicate = function (str, n) { var ret = ""; for (var i = 0; i < n; i++) { ret += str; } return ret; } //是否包含单词 string.prototype.has = function (word) { var words = this.split(" "); for (var i = 0; i < words.length; i++) { if (words[i] == word) return true; } return false; } //添加单词 string.prototype.add = function (word) { if (this.has(word)) return this; return (this.length > 0 ? this + " " : "") + word; } //移除单词 string.prototype.remove = function (word) { if (!this.has(word)) return this; var words = this.split(" "); for (var i = words.length - 1; i >= 0; i--) { if (words[i] == word) { words.splice(i, 1); } } return words.join(" "); } //日期格式化 date.prototype.format = function (args) { var res = args; var o = { "m+": this.getmonth() + 1, //month "d+": this.getdate(), //day "h+": this.gethours(), //hour "m+": this.getminutes(), //minute "s+": this.getseconds(), //second "q+": math.floor((this.getmonth() + 3) / 3), //quarter "s": this.getmilliseconds() //millisecond } if (/(y+)/.test(res)) res = res.replace(regexp.$1, (this.getfullyear() + "").substr(4 - regexp.$1.length)); for (var k in o) if (new regexp("(" + k + ")").test(res)) res = res.replace(regexp.$1, regexp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); return res; }; //ie不支持trim() if(!string.prototype.trim) { var trim_reg = /(^\s*)|(\s*$)/g; string.prototype.trim = function () { return this.replace(trim_reg, ''); } }; //让ie支持这种带参调用 newdate = function (str) { strs = str.split('-'); if (strs.length < 3) return null; var date = new date(); date.setutcfullyear(strs[0], strs[1] - 1, strs[2]); date.setutchours(0, 0, 0, 0); if (isnan(date)) return null; return date; }; //object object.prototype.extend = function (attrs) { for (var p in attrs) { this[p] = attrs[p]; } return this; }; //按属性查找array中的项 array.prototype.find = function (obj) { for (var i = 0; i < this.length; i++) { var o = this[i]; for (var p in obj) { if (p in o && o[p] == obj[p]) return o; } } } //url工具 var url = { //分割 split: function (url) { url = decodeuri(url); var idx = url.lastindexof("/"); var path = url.substring(0, idx + 1), name = url.substring(idx + 1); return { path: path, name: name }; //path最后带"/" }, //将后一个绝对路径转为相对于前一个的路径 relative: function(path1, path2) { if (path1.charat(0) != "/" || path2.charat(0) != "/") return null; var parts1 = path1.split("/"), parts2 = path2.split("/"); for (var i = 1; i < parts1.length && i < parts2.length; i++) if (parts1[i] != parts2[i]) break; i--; return string.replicate("../", parts1.length - 1 - i - 1) + parts2.splice(i + 1, parts2.length - 1 - i).join("/"); } }; //脚本 var scripts = { getpathbyname: function (filename) { var path; var scripts = document.scripts; for (var i = 0; i < scripts.length; i++) { var urlstr = scripts[i].src; //总是为绝对路径 if (urlstr) { var url = url.split(urlstr); if (url.name == filename) { path = url.path; break; } else path = ""; } } return path; }, quote: function (path) { } }; //数据工具 var data = { //格式化 format: function (val) { if (val == null) return ""; switch (typeof (val)) { case "string": return val; case "object": switch (val.constructor) { case date: return val.format("yyyy-mm-dd hh:mm:ss"); default: return val; } default: return val; } } }; //查询字符串 var qs = { getval: function (key) { var reg = new regexp("[\?\&]" + key + "=([^\&]*)"); var res = location.search.match(reg); return res == null ? "" : res[0].split("=")[1]; }, getkv: function (key) { var reg = new regexp("[\?\&]" + key + "=([^\&]*)"); var res = location.search.match(reg); return res == null ? null : res[0]; }, setval: function (key, val) { var qs = location.search; var okv = getquerykeyvalue(key); var reg = new regexp("[\?\&]" + key + "=([^\&]+)"); var kv = key + "=" + val; if (okv == null) return qs + (getquerystring() != null ? "&" : "?") + kv; else return qs.replace(okv, okv[0] + kv); } }; //html工具 var html = { encode: function (str) { var res; var div = document.createelement("div"); var text = document.createtextnode(str); div.appendchild(text); res = div.innerhtml; div.parentnode.removechild(div); return res; }, decode: function (str) { var res; var div = document.createelement("div"); div.innerhtml = str; res = div.innerhtml; div.parentnode.removechild(div); return res; } }; //dom操作 var dom = { //窗口大小 getwinsize: function () { var width = document.documentelement.clientwidth, height = document.documentelement.clientheight; return { width: width, height: height }; }, //客户区坐标转文档坐标 convpos: function (pos) { var scrollx = document.documentelement.scrollleft || document.body.scrollleft, scrolly = document.documentelement.scrolltop || document.body.scrolltop; return { x: pos.x + scrollx, y: pos.y + scrolly }; }, //获取元素的客户区坐标 getpos: function (ele) { if (typeof (ele) == "string") ele = dom.get(ele); var rect = ele.getboundingclientrect(); return { x: rect.left, y: rect.top }; }, //获取 get: function (id) { if (typeof (id) == "string") return document.getelementbyid(id); else return id; }, getbytag: function(ele, tag) { if (typeof(ele) == "string") ele = dom.get(ele); return ele.getelementsbytagname(tag); }, getbyclass: function(ele, classname) { if (typeof(ele) == "string") ele = dom.get(ele); var nodes = ele.childnodes; var eles = []; for (var i = 0; i < eles.length; i++) { var node = nodes[i]; if (node.classname.has(classname)) eles.push(node); } return eles; }, //创建 createtag: function (tag) { return document.createelement(tag); }, createtext: function (text) { return document.createtextnode(text); }, create: function (str) { var reg = /<(?:(?:\/?[a-za-z]\w*\b(?:[=\s](['"]?)[\s\s]*?\1)*)|(?:!--[\s\s]*?--))\/?>/g; if (!reg.test(str)) return null; var div = document.createelement("div"); div.innerhtml = str; var ele = div.childnodes[0]; return ele; }, //移除 remove: function (ele) { ele = dom.get(ele); ele.parentnode.removechild(ele); }, empty: function (ele) { ele = dom.get(ele); while (ele.firstchild) ele.removechild(ele.firstchild); }, //设置属性 attr: function (ele, attrs) { for (var k in attrs) { var value = attrs[k]; switch (k) { case 'class': //ie下要这样赋值,setattribute不起作用 ele.classname = value; break; case 'style': ele.style.csstext = ele.style.csstext + ";" + value; break; case 'innerhtml': ele[k] = value; break; case 'value': ele.value = value; break; default: ele.setattribute(k, value); break; } } }, //判断类 hasclass: function(ele, classname) { return ele.classname.has(classname); }, //添加类 addclass: function(ele, classname) { ele.classname = ele.classname.add(classname); }, //移除类 removeclass: function(ele, classname) { ele.classname = ele.classname.remove(classname); }, //在节点后插入 insertafter: function (target, node) { if(!target.nextsibling) target.parentnode.appendchild(node); else target.parentnode.insertbefore(node, target.nextsibling); }, //创建id createid: function(pre) { var i = 1; while (dom.get(pre + i) && i < 10) i++; return pre + i; } }; //html控件select相关操作 (function() { window.select = function (ele) { if (typeof(id) == "string") this.ele = dom.get(id); else this.ele = ele; }; var fn = window.select.prototype; fn.add = function (item) { op = dom.create("option"); op.innerhtml = item.text; dom.attr(op, { value: item.value }); this.ele.appendchild(op); }; fn.addrange = function (items) { for (var i = 0; i < items.length; i++) this.add(items[i]); }; fn.set = function (items) { dom.empty(this.ele); this.add(items); }; })(); //httprequest var httprequest = { create: function () { var request; try { // firefox, opera 8.0+, safari request = new xmlhttprequest(); } catch (e) { try { request = new activexobject("msxml2.xmlhttp"); } catch (e) { try { request = new activexobject("microsoft.xmlhttp"); } catch (e) { alert("您的浏览器不支持ajax!"); } } } return request; } };