最近在做一个小项目,虽说小,但需要实现的功能还是比较多的,所以有些方法就会多次用到,为了代码的重用性,所以我把经常会用到的一些常见功能整理到了一起,名字就叫util.js,工具的意思。这些js都是来源于网络,只有极少个别是自己写的,把它放到这里,方便自己以后需要时查找。也希望有一天初入web的同行遇到困难时,能够搜出这段代码,如果能为别人带去一点方便,也算是达到自己建这个博客的初衷了。个人觉得,如果一个人连自己知道的东西都不敢分享,生怕别人学了去,那他的知识将毫无意义。废话不多说了,直接上代码(本人自知自己js功底不怎么样,如有不足之处,望见谅,更欢迎留言指出)。如果遇到有些代码一行比较长,显示不完整,可以点代码展示区的右上角,可以在一个更大的窗口进行查看。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 |
/** * Created by veznlee on 2016/12/14. */ /*格式化日期*/ Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth() + 1, // 月份 "d+" : this.getDate(), // 日 "h+" : this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时 "H+" : this.getHours(), // 小时 "m+" : this.getMinutes(), // 分 "s+" : this.getSeconds(), // 秒 "q+" : Math.floor((this.getMonth() + 3) / 3), // 季度 "S" : this.getMilliseconds() // 毫秒 }; var week = { "0" : "/u65e5", "1" : "/u4e00", "2" : "/u4e8c", "3" : "/u4e09", "4" : "/u56db", "5" : "/u4e94", "6" : "/u516d" }; if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "") .substr(4 - RegExp.$1.length)); } if (/(E+)/.test(fmt)) { fmt = fmt .replace( RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468") : "") + week[this.getDay() + ""]); } for ( var k in o) { if (new RegExp("(" + k + ")").test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); } } return fmt; }; // 清除两边的空格 String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ''); }; // String转化为Number String.prototype.ToInt = function() { return isNaN(parseInt(this)) ? this.toString() : parseInt(this); }; /*单继承,属性复制*/ function extendProperty(target,source){ for(var pro in source){ target[pro] = source[pointer]; } return target; } /** * 节流模式:对重复的业务逻辑执行节流控制,只执行最后一次 * 参数可以是(fn,time)或者(Boolean值,fn),单独的fn也可以 */ function throttle(){ //获取第一个参数 var isClear = arguments[0],fn; //如果第一个参数是布尔值,则表示是否清除计时器 if(typeof isClear === 'boolean'){ //第二个参数则为函数 fn = arguments[1]; //如果函数的计时器句柄存在,则清除 fn._throttleID && clearTimeout(fn._throttleID); }else{ //第一个参数为函数 fn = isClear; //第二个参数为函数值形式的参数 var param = arguments[1]; //对执行时的参数适配默认值 var p = extendProperty({ context : null,//执行函数执行时的作用域 args : [],//执行函数执行时的相关参数(IE下要为数组) time : 300//执行函数延迟执行时间 },param); //清除函数的计时器句柄 arguments.callee(true, fn); //添加计时器 fn._throttleID = setTimeout(function(){ //执行函数 fn.apply(p.context, p.args); }, p.time); } } /*根据数据取得在数组中的索引*/ Array.prototype.getIndex = function(obj){ for (var i = 0; i < this.length; i++) { if (obj == this[i]) { return i; } } return -1; }; /*移除数组中的某元素*/ Array.prototype.remove= function (obj) { for (var i = this.length-1; i >= 0; i--) { if (obj == this[i]) { this.splice(i, 1); break; } } return this; }; /*判断元素是否在数组中*/ Array.prototype.contains= function (obj) { for (var i = this.length-1; i >= 0; i--) { if (obj == this[i]) { return true; } } return false; }; Array.prototype.reduce = function(fun /*, initial*/) { var len = this.length; if (typeof fun != "function")throw new TypeError(); // no value to return if no initial value and an empty array if (len == 0 && arguments.length == 1)throw new TypeError(); var i = 0; if (arguments.length >= 2) { var rv = arguments[1]; } else { do { if (i in this) { rv = this[i++]; break; } // if array contains no values, no initial value to return if (++i >= len) throw new TypeError(); } while (true); } for (; i < len; i++) { if (i in this) rv = fun.call(null, rv, this[i], i, this); } return rv; }; Array.prototype.isArray= function (value) { if (value instanceof Array || (!(value instanceof Object) && (Object.prototype.toString.call(value) == '[object Array]') || typeof value.length == 'number' && typeof value.splice != 'undefined' && typeof value.propertyIsEnumerable != 'undefined' && !value.propertyIsEnumerable('splice'))) { return true; }else{ return false; } }; /*判断是否为空*/ function isEmpty(val){ if ((val==null || typeof(val)=="undefined")|| (typeof(val)=="string"&&val==""&&val!="undefined")){ return true; }else{ return false; } } /*判断是否不为空*/ function isNotEmpty(val){ return !isEmpty(val); } /*根据文件名获取文件格式*/ function getFileTypeByFileName(str){ return str.substr(str.lastIndexOf(".")+1).toLowerCase(); } /*获取浏览器版本信息*/ function getBrowserInfo(){ var userAgent = navigator.userAgent.toLowerCase(); console.log(userAgent); return { version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1], chrome: /chrome/.test(userAgent), safari: /webkit/.test(userAgent), opera: /opera/.test(userAgent), msie: /msie/.test(userAgent) && !/opera/.test(userAgent), mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) }; } /*判断浏览器是否为IE8*/ function bowserIE8(){ var browser = getBrowserInfo(); return (browser["version"] == "8.0" && browser["msie"]) ? true : false; } /*判断浏览器是否为IE9*/ function bowserIE9(){ var browser = getBrowserInfo(); return (browser["version"] == "9.0" && browser["msie"]) ? true : false; } /*兼容IE89的placeholder方法*/ function handleFixInputPlaceholderForIE89() { var isIE8 = bowserIE8(), isIE9 = bowserIE9(); if (isIE8 || isIE9) { jQuery('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function () { var input = jQuery(this); if(input.val()=='' && input.attr("placeholder") != '') { input.addClass("placeholder").val(input.attr('placeholder')); } input.focus(function () { if (input.val() == input.attr('placeholder')) { input.val(''); } }); input.blur(function () { if (input.val() == '' || input.val() == input.attr('placeholder')) { input.val(input.attr('placeholder')); } }); }); } } /*==以下方法针对数组和对象,对象和数组中的对象属性上面可以不完全相等,只针对某一属性==*/ /** * 根据指定属性判断一个元素是否包含于某数组中 * @param arr 判断数组 * @param item 判断对象 * @param property 判断依据的属性,当没有属性2时,数组中元素与指定对象都根据这一属性 * @param property2 判断依据的属性2,当指定该参数时, * 是根据数组中元素的property与指定对象的property2比较 * @return {boolean} 如果包含,返回true,否则false */ function judgeIsContainsByProperty(arr,item,property,property2){ var len = arr.length, i=0; for(;i<len;i++){ if(property2){ if(item[property2] == arr[i][property]){ return true; } }else{ if(item[property] == arr[i][property]){ return true; } } } return false; } /** * 根据指定属性删除数组中某一个元素 * @param arr 需删除对象的数组 * @param item 需删除的对象 * @param property 删除依据的属性,当没有属性2时,数组中元素与指定对象都根据这一属性 * @param property2 判断依据的属性2,当指定该参数时, * 是根据数组中元素的property与指定对象的property2比较,相等则删除 */ function deleteObjFromArrByProperty(arr,item,property,property2){ var len = arr.length, i=0; for(;i<len;i++){ if(property2){ if(item[property2] == arr[i][property]){ arr.splice(i, 1); break; } }else{ console.log(arr[i]); console.log(item); if(item[property] == arr[i][property]){ arr.splice(i, 1); break; } } } } /** * 根据指定属性取出数组中某一个元素 * @param arr 需获取对象的数组 * @param property 获取对象依据的属性 * @param value 指定属性值 */ function getObjFromArrByProperty(arr,property,value){ var len = arr.length, i=0; for(;i<len;i++){ if(value == arr[i][property]){ return arr[i]; } } return false; } /** * 将数组arr2合并到arr1,根据指定属性去除重复 * @param arr1 数组1 * @param arr2 数组2 * @param property 去重的属性。如:数组1与数组2都有一个id为1的元素,那么只保留一个 * @returns {array} 合并后得到的新数组 */ function mergeArrAndRemoveRepeatedByProperty(arr1,arr2,property){ var len = arr2.length, i=0; for(;i<len;i++){ if(!judgeIsContainsByProperty(arr1,arr2[i],property)){ arr1.push(arr2[i]); } } return arr1; } |
发表评论