获取URL ?后的查询参数
function query(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = decodeURI(window.location.search).substr(1).match(reg); if(r != null) return unescape(r[2]); };
数组去重
function unique(arr){ var res =[]; var json = {}; for(var i=0;i<arr.length;i++){ if(!json[arr[i]]){ res.push(arr[i]); json[arr[i]] = 1; } } return res; }
数字输入框
function clearNoNum(obj) { obj.value = obj.value.replace(/^(-)*(d+).(dd).*$/, '$1$2.$3'); //只能输入两个小数 if(obj.value.indexOf(".") < 0 && obj.value != "") { //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额 obj.value = parseFloat(obj.value); } if(obj.value == 'NaN') { obj.value = 1; } }
冒泡排序
function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相邻元素两两对比 var temp = arr[j+1]; //元素交换 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; }
选择排序
在时间复杂度上表现最稳定的排序算法之一,因为无论什么数据进去都是O(n²)的时间复杂度。。。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
function selectionSort(arr) { var len = arr.length; var minIndex, temp; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { //寻找最小的数 minIndex = j; //将最小数的索引保存 } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; }
插入排序
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。当然,如果你说你打扑克牌摸牌的时候从来不按牌的大小整理牌,那估计这辈子你对插入排序的算法都不会产生任何兴趣了。。。
插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。对于这种算法,得了懒癌的我就套用教科书上的一句经典的话吧:感兴趣的同学可以在课后自行研究。。。
function insertionSort(arr) { var len = arr.length; var preIndex, current; for (var i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while(preIndex >= 0 && arr[preIndex] > current) { arr[preIndex+1] = arr[preIndex]; preIndex--; } arr[preIndex+1] = current; } return arr; }
js深拷贝方式一: 递归拷贝
var clone = function(obj) { var newObj = obj.constructor === Array ? [] : {}; for( var key in obj) { newObj[key] = typeof obj[key] === 'Object' ? clone(obj[key]) : obj[key]; } return newObj; }
js深拷贝方式2,利用json对象转化为字符串的方法
var clone2 = function(v) { return ( JSON.parse(JSON.stringify(v)) ); }
毫秒转换为年月日时分秒
function timestampToTime(timestamp) { var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000 Y = date.getFullYear() + '-'; M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; D = change(date.getDate()) + ' '; h = change(date.getHours()) + ':'; m = change(date.getMinutes()) + ':'; s = change(date.getSeconds()); return Y + M + D + h + m + s; } function change(t) { if (t < 10) { return "0" + t; } else { return t; } }
js模糊查询(表格td)
$("#filterName").keyup(function() { $("table tbody tr").hide(); $(".inv_neirong").filter(":contains('" + ($(this).val()) + "')").parent().show(); })
视频插件
<object width='541' height='450'> <param name='allowFullScreen' value='true'> <param name='movie' value='http://img1.c0.letv.com/ptv/player/swfPlayer.swf?autoPlay=0&id=31121775'/> <embed src='http://img1.c0.letv.com/ptv/player/swfPlayer.swf?autoPlay=0&id=31121775' width='541' height='450' allowFullScreen='true' type='application/x-shockwave-flash'/> </object>
获取日期之间的日期数组
Date.prototype.format = function() { var s = ''; var mouth = (this.getMonth() + 1) >= 10 ? (this.getMonth() + 1) : ('0' + (this.getMonth() + 1)); var day = this.getDate() >= 10 ? this.getDate() : ('0' + this.getDate()); s += this.getFullYear() + '-'; // 获取年份。 s += mouth + "-"; // 获取月份。 s += day; // 获取日。 return(s); // 返回日期。 }; function getAll(begin, end) { var dateArr=[]; var ab = begin.split("-"); var ae = end.split("-"); var db = new Date(); db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]); var de = new Date(); de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]); var unixDb = db.getTime(); var unixDe = de.getTime(); for(var k = unixDb; k <= unixDe;) { dateArr.push((new Date(parseInt(k))).format()); k = k + 24 * 60 * 60 * 1000; } console.log(dateArr); }