[转]自己写的常用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;
}
posted on 2011-07-23 18:45  ithawk  阅读(451)  评论(0编辑  收藏  举报