我自己的Javascript 库,封装了一些常用函数 Kingwell.js

时间:2021-06-20 11:17:08

现在Javascript库海量,流行的也多,比如jQuery,YUI等,虽然功能强大,但也是不万能的,功能不可能涉及方方面面,自己写一个的JS库是对这些的补充,很多也比较实用,把应用到项目中中去也比较方面,这也是对工作的一些积累,也加深对知识的理解。

2012-6-20更新,添加设置Cookie,获取Cookie,删除Cookie方法。很实用哦.......................

2012-7-22更新,表格排序,获取URL参数,批量清除Cookie...

2012-8-24更新,动态加载JS,Ajax封装,HTML编码...

  1. /*
  2. * Name    : Kingwell JavaScript Library v1.5
  3. * Author  : Kingwell Leng
  4. * E-mial  : jinhua.leng ### gamil.com
  5. * Blog    : http://www.cnblogs.com/kingwell/ http://kingwell-leng.iteye.com/admin
  6. * Date    : 2013-4-31 15:07
  7. */
  8. (function (w, d) {
  9. if (!window.KW) {
  10. window.KW = {};
  11. }
  12. var location = window.location,
  13. de = d.documentElement,
  14. userAgent = navigator.userAgent.toLowerCase(),
  15. ie6 = /msie 6.0/.test(userAgent),
  16. opera = /opera/.test(userAgent),
  17. ie = /msie/.test(userAgent) && !opera,
  18. safari = /webkit/.test(userAgent),
  19. ff = /firefox/.test(userAgent);
  20. var tip = {
  21. require : '缺少参数,参数必须的',
  22. rule : '参数不合法'
  23. };
  24. KW = {
  25. name : 'Kingwell Javascript Library',
  26. version : '1.5',
  27. debug : true,
  28. namespace : function (name) {
  29. var parts = name.split('.');
  30. var current = KW;
  31. for (var i in parts) {
  32. if (!current[parts[i]]) {
  33. current[parts[i]] = {};
  34. }
  35. current = current[parts[i]];
  36. }
  37. },
  38. Dom : {
  39. $ : function (id) {
  40. return typeof id === 'string' ? d.getElementById(id) : id;
  41. },
  42. remove : function (o) {
  43. var obj = this.$(o);
  44. if (!obj) {
  45. return;
  46. }
  47. return obj.parentNode.removeChild(obj);
  48. },
  49. setOpacity : function (obj, val) {
  50. var vals = (typeof obj === "number" && val <= 100 && val >= 0) ? val : 100;
  51. if (!obj) {
  52. return;
  53. }
  54. if (ie) {
  55. obj.style.filter = 'alpha(opacity=' + vals + ')';
  56. } else {
  57. obj.style.opacity = vals / 100;
  58. }
  59. },
  60. getMaxZindex : function (o) {
  61. var maxZindex = 0;
  62. var obj = o ? o : '*';
  63. var divs = d.getElementsByTagName(obj);
  64. for (z = 0; z < divs.length; z++) {
  65. maxZindex = Math.max(maxZindex, divs[z].style.zIndex);
  66. }
  67. return maxZindex;
  68. },
  69. createElement : function (type, prop) {
  70. var tmp = d.createElement(type);
  71. for (var i in prop) {
  72. tmp.setAttribute(i, prop[i]);
  73. }
  74. return tmp;
  75. },
  76. createTextNode : function (txt) {
  77. return d.createTextNode(txt);
  78. },
  79. hasAttr : function (obj, attr) {
  80. obj.getAttribute(attr);
  81. return obj;
  82. },
  83. setAttr : function (obj, attr) {
  84. var self = this;
  85. for (var i in attr) {
  86. if (i === 'class') {
  87. self.addClass(obj, attr[i]);
  88. } else {
  89. obj.setAttribute(i, attr[i]);
  90. }
  91. }
  92. return obj;
  93. },
  94. removeAttr : function (obj, attr) {
  95. obj.removeAttribute(attr);
  96. return obj;
  97. },
  98. getClass : function (c, pd) {
  99. var all = pd ? d.getElementsByName(pd).getElementsByTagName("*") : d.getElementsByTagName("*"),
  100. str = "",
  101. n = [];
  102. for (var i = 0; i < all.length; i++) {
  103. if (KW.Dom.hasClass(all[i], c)) {
  104. n.push(all[i]);
  105. }
  106. }
  107. return n;
  108. },
  109. addClass : function (o, str) {
  110. var obj = this.$(o);
  111. if (!obj) {
  112. return;
  113. }
  114. var className = obj.className;
  115. var reg = eval("/^" + str + "$ | " + str + "$|^" + str + " | " + str + " /");
  116. if (reg.test(className)) {
  117. return;
  118. }
  119. if (className !== '') {
  120. obj.className = className + " " + str;
  121. } else {
  122. obj.className = str;
  123. }
  124. },
  125. removeClass : function (o, str) {
  126. var obj = this.$(o);
  127. if (!obj) {
  128. return;
  129. }
  130. var className = obj.className;
  131. if (this.isNull(className)) {
  132. var reg = new RegExp(str, "g");
  133. var n = className.replace(reg, "");
  134. obj.className = n;
  135. }
  136. },
  137. hasClass : function (o, str) {
  138. if (!o) {
  139. return;
  140. }
  141. var obj = this.$(o);
  142. var className = obj.className;
  143. var reg = eval("/^" + str + "$| " + str + "$|^" + str + " | " + str + " /");
  144. if (reg.test(className)) {
  145. return true;
  146. } else {
  147. return false;
  148. }
  149. },
  150. html : function (obj, html) {
  151. if (html) {
  152. obj.innerHTML = html;
  153. } else {
  154. return obj.innerHTML;
  155. }
  156. },
  157. text : function (obj, text) {
  158. if (text) {
  159. if (document.textContent) {
  160. obj.textContent = text;
  161. } else {
  162. obj.innerText = text;
  163. }
  164. } else {
  165. if (document.textConten) {
  166. return obj.textContent;
  167. } else {
  168. return obj.innerText;
  169. }
  170. }
  171. }
  172. },
  173. Events : {
  174. addEvent : function (oTarget, oType, fnHandler) {
  175. var self = this;
  176. if (oTarget.addEventListener) {
  177. oTarget.addEventListener(oType, fnHandler, false);
  178. } else if (oTarget.attachEvent) {
  179. oTarget.attachEvent('on' + oType, fnHandler);
  180. } else {
  181. oTarget['on' + oType] = fnHandler;
  182. }
  183. },
  184. removeEvent : function (oTarget, oType, fnHandler) {
  185. var self = this;
  186. if (oTarget.removeEventListener) {
  187. oTarget.removeEventListener(oType, fnHandler, false);
  188. } else if (oTarget.detachEvent) {
  189. oTarget.detachEvent('on' + oType, fnHandler);
  190. } else {
  191. oTarget['on' + oType] = null;
  192. }
  193. },
  194. getEvent : function (ev) {
  195. return ev || window.event;
  196. },
  197. getTarget : function (ev) {
  198. return this.getEvent(ev).target || this.getEvent().srcElement;
  199. },
  200. stopPropagation : function () {
  201. if (window.event) {
  202. return this.getEvent().cancelBubble = true;
  203. } else {
  204. return arguments.callee.caller.arguments[0].stopPropagation();
  205. }
  206. },
  207. stopDefault : function () {
  208. if (window.event) {
  209. return this.getEvent().returnValue = false;
  210. } else {
  211. return arguments.callee.caller.arguments[0].preventDefault();
  212. }
  213. }
  214. },
  215. Ready : function (loadEvent) {
  216. if (!loadEvent) {
  217. return;
  218. }
  219. var init = function () {
  220. if (arguments.callee.done) {
  221. return;
  222. } else {
  223. arguments.callee.done = true;
  224. }
  225. loadEvent.apply(d, arguments);
  226. };
  227. if (d.addEventListener) {
  228. d.addEventListener("DOMContentLoaded", init, false);
  229. return;
  230. }
  231. if (safari) {
  232. var _timer = setInterval(function () {
  233. if (/loaded|complete/.test(d.readyState)) {
  234. clearInterval(_timer);
  235. init();
  236. }
  237. }, 10);
  238. }
  239. d.write('<script id="_ie_onload" defer src="javascript:void(0)"><\/script>');
  240. var script = d.getElementById('_ie_onload');
  241. script.onreadystatechange = function () {
  242. if (this.readyState == 'complete') {
  243. init();
  244. }
  245. };
  246. return true;
  247. },
  248. Storage : {
  249. setItem : function (strName, strValue) {
  250. if (Storage) {}
  251. else if (Storage) {}
  252. else {}
  253. },
  254. getItem : function (strValue) {},
  255. removeItem : function (strValue) {},
  256. removeAll : function () {}
  257. },
  258. getScript : function (obj, callback, order) {
  259. var self = this,
  260. arr = obj,
  261. timeout,
  262. ord = order || true,
  263. num = 0,
  264. str = typeof obj === 'string';
  265. if (!arr) {
  266. this.Error(tip.require);
  267. return;
  268. }
  269. function add() {
  270. if (arr[0] === undefined) {
  271. return;
  272. }
  273. var script = KW.Dom.createElement("script", {
  274. 'src' : (str ? obj : arr[num]),
  275. 'type' : 'text/javascript'
  276. }),
  277. header = d.getElementsByTagName("head")[0];
  278. if (str) {
  279. if (script.readyState) {
  280. script.onreadystatechange = function () {
  281. if (script.readyState === 'loaded' || script.readyState === 'complete') {
  282. script.onreadystatechange = null;
  283. callback && callback();
  284. }
  285. };
  286. } else {
  287. script.onload = function () {
  288. callback && callback();
  289. };
  290. }
  291. } else {
  292. if (arr.length >= 1) {
  293. if (script.readyState) {
  294. script.onreadystatechange = function () {
  295. if (script.readyState === 'loaded' || script.readyState === 'complete') {
  296. script.onreadystatechange = null;
  297. arr.shift();
  298. timeout = setTimeout(add, 1);
  299. }
  300. };
  301. } else {
  302. script.onload = function () {
  303. arr.shift();
  304. timeout = setTimeout(add, 1);
  305. };
  306. }
  307. } else {
  308. clearTimeout(timeout);
  309. callback && callback();
  310. }
  311. }
  312. header.appendChild(script);
  313. }
  314. add();
  315. },
  316. Ajax : function (obj) {
  317. if (!obj.url) {
  318. return false;
  319. }
  320. var method = obj.type || "GET";
  321. var async = obj.async || true;
  322. var dataType = obj.dataType;
  323. var XHR = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
  324. XHR.open(method, obj.url, async);
  325. XHR.setRequestHeader('If-Modified-Since', 'Thu, 06 Apr 2006 00:00: 00 GMT');
  326. XHR.send(null);
  327. if (obj.sendBefore) {
  328. obj.sendBefore();
  329. }
  330. XHR.onreadystatechange = function () {
  331. if (XHR.readyState == 4 && (XHR.status >= 200 && XHR.status < 300 || XHR.status == 304)) {
  332. if (obj.success) {
  333. if (dataType && dataType.toLocaleLowerCase() === "json") {
  334. obj.success.call(XHR, eval("(" + XHR.responseText + ")"));
  335. } else if (dataType && dataType.toLocaleLowerCase() === "xml") {
  336. obj.success.call(XHR, XHR.responseXML);
  337. } else {
  338. obj.success.call(XHR, XHR.responseText);
  339. }
  340. }
  341. if (obj.complete) {
  342. obj.complete();
  343. }
  344. } else {
  345. if (obj.complete) {
  346. obj.complete();
  347. }
  348. }
  349. };
  350. },
  351. Cookies : {
  352. setCookie : function (sName, sValue, oExpires, sPath, sDomain, bSecure) {
  353. var sCookie = sName + '=' + encodeURIComponent(sValue);
  354. if (oExpires) {
  355. var date = new Date();
  356. date.setTime(date.getTime() + oExpires * 60 * 60 * 1000);
  357. sCookie += '; expires=' + date.toUTCString();
  358. }
  359. if (sPath) {
  360. sCookie += '; path=' + sPath;
  361. }
  362. if (sDomain) {
  363. sCookie += '; domain=' + sDomain;
  364. }
  365. if (bSecure) {
  366. sCookie += '; secure';
  367. }
  368. d.cookie = sCookie;
  369. },
  370. getCookie : function (sName) {
  371. var sRE = '(?:; )?' + sName + '=([^;]*)';
  372. var oRE = new RegExp(sRE);
  373. if (oRE.test(d.cookie)) {
  374. return decodeURIComponent(RegExp[$1]);
  375. } else {
  376. return null;
  377. }
  378. },
  379. removeCookie : function (sName, sPath, sDomain) {
  380. this.setCookie(sName, '', new Date(0), sPath, sDomain);
  381. },
  382. clearAllCookie : function () {
  383. var cookies = d.cookie.split(";");
  384. var len = cookies.length;
  385. for (var i = 0; i < len; i++) {
  386. var cookie = cookies[i];
  387. var eqPos = cookie.indexOf("=");
  388. var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
  389. name = name.replace(/^\s*|\s*$/, "");
  390. d.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
  391. }
  392. }
  393. },
  394. tabSort : function (sTableID, iCol, sDataType) { //排序函数,sTableID为目标,iCol哪列排序,为必需,sDataType可选
  395. var oTable = document.getElementById(sTableID);
  396. var oTBody = oTable.tBodies[0];
  397. var colDataRows = oTBody.rows;
  398. var aTRs = [];
  399. var len = colDataRows.length;
  400. function convert(sValue, sDataType) { //类型转,根据不同类型数据排序,比如,整型,日期,浮点,字符串,接受两个参数,一个是值,一个是排序的数据类型
  401. switch (sDataType) {
  402. case "int":
  403. return parseInt(sValue);
  404. case "float":
  405. return parseFloat(sValue);
  406. case "date":
  407. return new Date(Date.parse(sValue));
  408. default:
  409. return sValue.toString();
  410. }
  411. }
  412. function geterateCompareTRs(iCol, sDataType) { //比较函数,用于sort排序用
  413. return function compareTRs(oTR1, oTR2) {
  414. var vValue1,
  415. vValue2;
  416. if (oTR1.cells[iCol].getAttribute("value")) { //用于高级排序,比如图片,添加一个额外的属性来排序
  417. vValue1 = convert(oTR1.cells[iCol].getAttribute("value"), sDataType);
  418. vValue2 = convert(oTR2.cells[iCol].getAttribute("value"), sDataType);
  419. } else {
  420. vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
  421. vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);
  422. }
  423. if (vValue1 < vValue2) {
  424. return -1;
  425. } else if (vValue1 > vValue2) {
  426. return 1;
  427. } else {
  428. return 0;
  429. }
  430. };
  431. }
  432. for (var i = 0; i < len; i++) {
  433. aTRs[i] = colDataRows[i];
  434. }
  435. if (oTable.sortCol == iCol) { //如果已经排序,则倒序
  436. aTRs.reverse();
  437. } else {
  438. aTRs.sort(geterateCompareTRs(iCol, sDataType));
  439. }
  440. var oFragment = document.createDocumentFragment();
  441. var trlen = aTRs.length;
  442. for (var j = 0; j < trlen; j++) {
  443. oFragment.appendChild(aTRs[j]);
  444. }
  445. oTBody.appendChild(oFragment);
  446. oTable.sortCol = iCol; //设置一个状态
  447. },
  448. Browse : {
  449. isIE : ie,
  450. isFF : ff
  451. },
  452. trim : function (str) {
  453. var re = /^\s*(.*?)\s*$/;
  454. return str.replace(re, '$1');
  455. },
  456. escape : function (str) {
  457. var s = "";
  458. if (str.length === 0) {
  459. return "";
  460. }
  461. s = str.replace(/&/g, "&amp;");
  462. s = s.replace(/</g, "&lt;");
  463. s = s.replace(/>/g, "&gt;");
  464. s = s.replace(/ /g, "&nbsp;");
  465. s = s.replace(/\'/g, "'");
  466. s = s.replace(/\"/g, "&quot;");
  467. return s;
  468. },
  469. getQueryString : function (name) {
  470. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  471. var r = location.search.substr(1).match(reg);
  472. if (r !== null)
  473. return unescape(r[2]);
  474. return null;
  475. },
  476. Error : function (obj, info) {
  477. if (!this.debug) {
  478. return;
  479. }
  480. throw Error(obj);
  481. }
  482. };
  483. Kingwell = KW;
  484. })(window, document);

不断地完善中....有些功能正在做,有些还在测试,现在还不完善。