[转]自己写的常用jquery扩展函数
http://bbs.chinaunix.net/thread-1836462-1-1.html
;(function($) { $.request = {}; $.validate = {}; $.common = {}; $.extend(jQuery.request, { queryString: function (name) { var url = document.URL; var arr = url.split('?'); if (arr.length < 2) { return ''; } url = arr[1]; //去掉最后一个#字符 if (url.lastIndexOf('#') == (url.length - 1)) url = url.substring(0, url.length - 1); var arrQueryStringPair = url.split('&'); if (arrQueryStringPair.length == 0) return ''; //未采用split方法,因为如果形如backUrl=aHR0cDNweD9zdGF0dXM9Mw== //的参数采用split方法不能正确获取到等号后面的值 for (var i = 0; i < arrQueryStringPair.length; ++i) { var startIndex = arrQueryStringPair[i].indexOf('=') + 1; var sName = arrQueryStringPair[i].substr(0, startIndex - 1); var result = arrQueryStringPair[i].substr(startIndex, arrQueryStringPair[i].length - startIndex); if (sName.toLowerCase() == name.toLowerCase()) { return result; } } return ''; }, /// 调用范例 /// var params = []; /// var o = new Object(); /// o.name = '_'; /// o.value = '_'; /// params.push(o); /// o = new Object(); /// o.name = 'sTatus'; /// o.value = '2'; /// params.push(o); /// var url = $.request.replaceQueryString(params); /// replaceQueryString : function (arrParams) { var url = document.URL; var destUrl = null; var arr = url.split('?'); if (arr.length < 2) { destUrl = arr[0] + '?'; for (var i = 0; i < arrParams.length; ++i) { destUrl += '&' + arrParams[i].name + '=' + arrParams[i].value; } return destUrl; } if (arr[1].indexOf('&') == 0) arr[1] = arr[1].substring(1, arr[1].length); url = arr[1]; destUrl = arr[0]; if (url != '') { //去掉最后一个#字符 if (url.lastIndexOf('#') == (url.length - 1)) url = url.substring(0, url.length - 1); var arrQueryStringPair = url.split('&'); if (arrQueryStringPair.length == 0) return destUrl; destUrl += '?'; if (arrQueryStringPair.length > 0 && (arrQueryStringPair[0] != '')) { for (var j = 0; j < arrQueryStringPair.length; ++j) { var arrTemp = arrQueryStringPair[j].split('='); if (arrTemp.length == 1) continue; if (arrTemp[0] == '') continue; var flag = false; for (var k = 0; k < arrParams.length; ++k) { if (arrParams[k].name.toLowerCase() == arrTemp[0].toLowerCase()) { destUrl += '&' + arrParams[k].name + '=' + arrParams[k].value; arrParams[k].added = true; flag = true; break; } } if (flag == false) destUrl += '&' + arrTemp[0] + '=' + arrTemp[1]; } for (var k = 0; k < arrParams.length; ++k) { if (!arrParams[k].added) { destUrl += '&' + arrParams[k].name + '=' + arrParams[k].value; arrParams[k].added = true; } } } } else { destUrl += '?'; for (var k = 0; k < arrParams.length; ++k) { if (k != 0) destUrl += '&'; destUrl += arrParams[k].name + '=' + arrParams[k].value; } } return destUrl; } }); $.extend(jQuery.validate, { isEmail : function(email) { return /^.+@.+\..{2,3}$/g.test(email); }, isInt: function(str) { return /^\d+$/img.test(str); } }); $.extend(jQuery.common, { //将value从逗号分隔的字符串中删除 //比如从a,b,c,d 将c删除,得到a,b,d removeFromCommaJoinedText : function (value, container) { if (value.length == 0) return ''; //去除前后逗号 value = value.replace(/^,/, '').replace(/,$/, ''); container = container.replace(/^,/, '').replace(/,$/, ''); if (container == value) { return ''; } var sArray = container.split(','); for (var i = sArray.length - 1; i >= 0; --i) { if (sArray[i] == value) sArray[i] = undefined; } var result = sArray.join(','); //因为undefined会连接成,,所以要将,,换成, result = result.replace(/,,/,','); result = result.replace(/^,/, '').replace(/,$/, ''); return result; }, /*判断两个对象是否相等的js函数 如果两个对象属性在初始化时出现的顺序不一样 但数目及值一样,最终比较结果也是true 支持每个属性又是其他类型,如对象、数组、数字、字符串 var a = {Name:"YuanXP",Id:9,Go:{a:'1',b:'2'}}; var b = {Id:9,Name:"YuanXP",'Go':{a:'1',b:'2'}}; var r = $.common.equal(a, b); alert(r); */ equal : function (objA, objB) { if (typeof arguments[0] != typeof arguments[1]) return false; //数组 if (arguments[0] instanceof Array) { if (arguments[0].length != arguments[1].length) return false; var allElementsEqual = true; for (var i = 0; i < arguments[0].length; ++i) { if (typeof arguments[0][i] != typeof arguments[1][i]) return false; if (typeof arguments[0][i] == 'number' && typeof arguments[1][i] == 'number') allElementsEqual = (arguments[0][i] == arguments[1][i]); else allElementsEqual = arguments.callee(arguments[0][i], arguments[1][i]); //递归判断对象是否相等 } return allElementsEqual; } //对象 if (arguments[0] instanceof Object && arguments[1] instanceof Object) { var result = true; var attributeLengthA = 0, attributeLengthB = 0; for (var o in arguments[0]) { //判断两个对象的同名属性是否相同(数字或字符串) if (typeof arguments[0][o] == 'number' || typeof arguments[0][o] == 'string') result = eval("arguments[0]['" + o + "'] == arguments[1]['" + o + "']"); else { //如果对象的属性也是对象,则递归判断两个对象的同名属性 //if (!arguments.callee(arguments[0][o], arguments[1][o])) if (!arguments.callee(eval("arguments[0]['" + o + "']"), eval("arguments[1]['" + o + "']"))) { result = false; return result; } } ++attributeLengthA; } for (var o in arguments[1]) { ++attributeLengthB; } //如果两个对象的属性数目不等,则两个对象也不等 if (attributeLengthA != attributeLengthB) result = false; return result; } return arguments[0] == arguments[1]; } }); })(jQuery); //合并两个数组的元素 Array.prototype.union = function(arrayB) { for (var i = 0; i < this.length; ++i) { var inArrID = false; for (var j = 0; j < arrayB.length; ++j) { if (arrayB[j] == this[i]) { inArrID = true; break; } } if (!inArrID) { arrayB.push(this[i]); } } var result = arrayB.join(','); result = result.replace(/^,/, '').replace(/,$/, ''); return result; } Array.prototype.removeIndex = function(i) { if (isNaN(i) || i > this.length) return false; this.splice(i,1); } Array.prototype.remove = function(key) { for (var i = 0; i < this.length; ++i) { if (this[i] == key) this.splice(i, 1); } } /* b = ['1','2','3','4','5']; alert("elements: "+b+"nLength: "+b.length); b.remove('4'); //删除值为'4'的元素 b.removeIndex(3) //删除下标为1的元素 alert("elements: "+b+"nLength: "+b.length); */ //判断数组是否已包含了某个元素的js函数 Array.prototype.contains = function(obj) { var i = this.length; while (i--) { if (this[i] === obj) { return true; } } return false; } |