摘要: 这是一个很基础的问题,但是我们往往经常做错。当一个数组需要清空的时候,很多人使用下面的方法:a = [];我们知道javascript变量存储方式分为引用类型和直接量。数组属于对象,即引用类型,引用的是变量指针地址,之所以这样设计也是为了节省内存。再说到上面的请空数组的方式,如果采用直接赋值一个新数组的方式,那么之前引用的数组可能不会被释放(有其他的引用),例如下面的代码:var a = [2,3];var b = a;a = [];console.log(b);这时候a和b就不是同一个数组了,清空了a而b还是指到之前的引用地址,除非你是故意的,否则这将会有隐患。所以最佳的请空数组方式是:将l 阅读全文
posted @ 2013-03-05 09:44 上善若水. 阅读(332) 评论(0) 推荐(0)
摘要: 实现原理:其实就是将事件绑定到父节点,由于事件冒泡,所有事件最终会冒泡到document节点当有事件触发时,则判断事件类型和触发事件的元素是否一致,如果相同则执行函数<!doctype html><html> <head> <title>jquery live()函数原理及实现</title> <style type="text/css"> table{ border-collapse:collapse; border-spacing:0; } ... 阅读全文
posted @ 2012-12-28 18:07 上善若水. 阅读(1289) 评论(0) 推荐(0)
摘要: 在做页面右下脚对话框时,直接使用position:fixed;大部分浏览器很容易就能做到,但是在IE6中却发现不行,原来是IE6不支持position:fixed;这个属性。虽然用JS肯定能解决这个问题,但是总觉得用JS来做布局的工作不是很好,网上找了下这个问题,发现可以直接用CSS方法解决,代码如下:_position:absolute;_bottom:auto;_top:expression(eval(document.compatMode && document.compatMode=='CSS1Compat') ? documentElement.scr 阅读全文
posted @ 2012-12-19 16:41 上善若水. 阅读(215) 评论(0) 推荐(0)
摘要: 项目中header中有个PNG透明背景图片,图片原图比header大很多,在chrome和ff中直接平铺刚好能铺满整个header区域,多出来的不显示,但在IE中会显示整个PNG图片的尺寸,导致撑大变形。后来在网上找到一段关于IE背景图片100%显示的帖子,找到解决方法是:filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='1.jpg',sizingMethod='scale');加上以上代码完美解决!转载帖子原文:由于W3C准备中,背景图片并不支持伸缩功能。所以在IE和FF这两大浏览器中 阅读全文
posted @ 2012-12-14 11:33 上善若水. 阅读(9006) 评论(0) 推荐(0)
摘要: 之前看很多人这样写for循环,感到很困惑,直接i<divs.length不就行了,为什么要多此一举加一个len呢?for(var i=0, len=divs.length; i<len; i++){ ...}昨天晚上再看javascript高级程序设计(第二版)发现有说这个问题的,说的是迭代nodeList时会出现无限循环的问题例如:var divs = document.getElementsByTagName("div");for(var i=0; i<divs.length; i++){ var div = document.createElemen 阅读全文
posted @ 2012-12-06 10:34 上善若水. 阅读(244) 评论(0) 推荐(0)
摘要: 工作中碰到需要对二维数组里面的数组的第一维数字大小进行排序,直接使用sort();得到的结果是:[[1009,1], [356,2], [798,3]],而这显然是不正确的,查看文档得知sort()是可带参数的,arrayObject.sort(sortby) //可选。规定排序顺序。必须是函数。若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。若 a 等于 b,则返回 0。若 a 大于 b,则返回一个大于 0 的值。所以将sort()修改可以实现:<html> <head> <title>二维数组排序</titl 阅读全文
posted @ 2012-10-26 10:55 上善若水. 阅读(377) 评论(0) 推荐(0)
摘要: //jquery validate扩展var reg_cn = /^[\u0391-\uFFE5]+$/;var reg_user = /^\w+$/;var reg_phone = /^\d{3,4}-?\d{7,8}$/;var reg_email = /^[\w-]+(\.[\w-]+)*@[... 阅读全文
posted @ 2012-09-25 20:13 上善若水. 阅读(536) 评论(0) 推荐(0)
摘要: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>test</title> <script type="text/javascript"> window.onload =function() { document.getElementById("test&qu 阅读全文
posted @ 2012-06-29 17:04 上善若水. 阅读(2781) 评论(0) 推荐(0)
摘要: 最近使用表单时发现一个问题,就是表单提交后,再使用reset按钮重置输入框,这时reset不起作用。网上查阅资料获知,其实reset的功能是重置表单为默认值,并不一定是清空表单。由于form提交后,输入框的默认值可能不为空(保存了上次查询的值),例如值为aa,不管怎么reset都会变为aa,就算输入bb后,再reset也会变成aa,而不是为空值。可见,是自己对reset按钮功能的误解,才觉得reset不起作用,同样可能很多人都会有这样的误解。解决方法:使用js功能重置表单值$(":reset").click(function(){ var resetArr = $(this 阅读全文
posted @ 2012-03-13 16:34 上善若水. 阅读(1705) 评论(0) 推荐(0)
摘要: 今天项目中发现一个问题,就是页面中有两个input输入框,始终无法选中第二个input输入框。开始还以为是哪里的JS控制了,后来把所有的JS都去掉还有这问题。看了结构后发现是有一个label标签将两个input包含起来了,结构如下:<html> <body> <label> <input type="text" /><input type="text" /> </label> </body></html> 后来将label标签去掉就没这问题了,查了下label 阅读全文
posted @ 2012-03-07 18:22 上善若水. 阅读(882) 评论(0) 推荐(0)