js 小贴士一星期合集


Posted in Javascript onApril 07, 2010

1.今天聊聊自定义事件
事件大家都知道,但在很多的框架中都有自定义事件的实现,我写了个简单的,跟大家分享一下,

<script> 
var cusEvent = function(){ 
var cache = {}; 
return { 
addEvent:function(type,fn){ 
cache[type]?cache[type].push(fn):(cache[type]=[fn]); 
}, 
removeEvent:function(type,fn){ 
if(cache[type]){ 
if(fn){ 
for(var i=0,ci;ci=cache[type][i];i++){ 
ci===fn&&cache[type].splice(i,1); 
} 
}else{ 
delete cache[type]; 
} 
} 
}, 
//e可以是个自定义的对象,也可以是字符串 
fire:function(e){ 
if(typeof e =='string'){ 
e = {type:e} 
}; 
var t = cache[e.type]; 
if(t){ 
for(var i=0,ci;ci=t[i];i++){ 
//e可以有自己的target,没有就用this代替 
ci.call(e.target||this,e) 
} 
} 
} 
} 
}() 
//使用 
cusEvent.addEvent('start',function(e){alert(e.type)}) 
cusEvent.addEvent('start',function(e){alert(e.type+"1")}) 
cusEvent.fire('start') 
cusEvent.removeEvent('start') 
</script>

2. innerHTML大家都用过,肥肠好使,但在ie下有些时候却不行,比如select如果你想在select上用option就是不行的,因为select的innerHTML是只读的,当然除了这个还有像tr,table等等,我写了个小方法,来兼容innerHTML在ie下对这些元素的使用,希望给大家 点启示
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<title>Untitled</title> 
</head> 
<body> 
Hello World! 
<select id="aa"><option>sdfsdf</option><option>sdfsdf</option></select> 
<input onclick="html(document.getElementById('aa'),'<option>change1</option><option>change</option>')" type="button" value="use innerHTML"/> 
</body> 
</html> 
<script> 
var html = function(){ 
var div = document.createElement('div'); 
return document.all?function(pN,h){ 
div.innerHTML = '<select>'+h+'</select>'; 
for(var i=0,ci;ci=pN.firstChild;) pN.removeChild(ci) 
debugger; 
for(;ci=div.firstChild.firstChild;) pN.appendChild(ci); 
}:function(pN,h){ 
pN.innerHTML = h; 
} 
}() 
</script>

原理就是在ie中,我用个临时元素div来跳过innerHTML不能用的问题,可以再写点负载点,就是判断传进来的是tr,table的话用相应的元素套用,
这个方法也可以解决select中option不好添加修改的问题
3.
在js中全局g-add变量是恶魔,是绝对建议不要使用的,但有的时候,可能要写个静态变量,随着函数的执行而累计比如
var a = 1; 
function fn(){ 
alert(++a); 
} 
fn()

fn()
想随着函数的执行而改变
好的写法可以这样
<script> 
var fn = function(){ 
var a = 1; 
return function(){ 
alert(++a); 
} 
}() 
fn(); 
fn(); 
</script>

a作为闭包,可以被内部的function访问到,但在全局中却没有产生一个全局的a
当然如果你想直接修改a也可以
<script> 
var fn = function(){ 
var a = 1; 
return function(p){ 
a = p===undefined?a+1:p; 
alert(a); 
} 
}() 
fn(); 
fn(0); 
</script>

4.
传统的方式一般是用el.offsetParent,el.offsetLeft遍历去取得
但其实又跟好的跟容易的方式那就是 getBoundingClientRect
代码如下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<title>Untitled</title> 
</head> 
<body> 
<div id="aa" style="position:absolute;width:200px;height:200px;left:200px;top:1000px;border:1px solid #ccc" onclick=offset(this) ></div> 
<div id="bb" style="position:absolute;width:200px;height:200px;border:1px solid red"></div> 
</body> 
</html> 
<script> 
var offset = function (o){ 
var d = document,m = Math.max,bl = m(d.body.clientLeft,d.documentElement.clientLeft),st,sl, 
bt = m(d.body.clientTop,d.documentElement.clientTop),b,bb = document.getElementById('bb'); 
return function(o){ 
b = o.getBoundingClientRect(); 
st = m(d.body.scrollTop,d.documentElement.scrollTop),sl = m(d.body.scrollLeft,d.documentElement.scrollLeft); 
bb.style.cssText +=";top:"+(b.top+st-bt)+'px;left:'+(b.left+sl-bl)+"px"; 
} 
}() 
</script>

当你点击最下边的灰色的div时,上边的红色的会跟灰色的完全重叠
5.
ie下的outerHTML大家都用过吧,肥肠好用,在你不仅仅只想返回某个元素下的html,还想返回这个元素的html
但是这个属性只能用在ie下,别的浏览器没有这个属性,怎么办呢,
js小贴士帮你解决这个问题
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<title>Untitled</title> 
</head> 
<body> 
<div > 
<div id="aa" ksjfkls="sdf" style=""> 
<p>sdf</p> 
<p djkfjd="df"></p> 
</div> 
<div id="bb" sdfksf=333 > 
</div> 
</div> 
</body> 
</html> 
<script> 
var html = function(){ 
var d = document,div = d.createElement('div'); 
return function(id){ 
var o = d.getElementById(id); 
if(o.outerHTML) 
return o.outerHTML; 
else{ 
div.innerHTML = '' 
var h = ''; 
div.appendChild(o.cloneNode(true)); 
return div.innerHTML 
} 
} 
}() 
alert(html('aa')) 
alert(html('bb')) 
</script>
Javascript 相关文章推荐
js读写(删除)Cookie实例详解
Apr 17 Javascript
js动态拼接正则表达式的两种方法
Mar 04 Javascript
JavaScript闭包详解
Feb 02 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 Javascript
javascript返回顶部的按钮实现方法
Jan 09 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
Oct 10 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
Dec 27 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
Sep 21 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
详解关于Vuex的action传入多个参数的问题
Feb 22 Javascript
vue-router 中 meta的用法详解
Nov 01 Javascript
Javascript 实用小技巧
Apr 07 #Javascript
javascript 函数使用说明
Apr 07 #Javascript
js下获取div中的数据的原理分析
Apr 07 #Javascript
Exjs 入门篇
Apr 07 #Javascript
javascript window.opener的用法分析
Apr 07 #Javascript
JS的反射问题
Apr 07 #Javascript
Extjs在exlipse中设置自动提示的方法
Apr 07 #Javascript
You might like
php获取微信openid方法总结
2019/10/10 PHP
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
python中的函数用法入门教程
2014/09/02 Python
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
python基础教程项目二之画幅好画
2018/04/02 Python
Sanic框架配置操作分析
2018/07/17 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
Python实现DDos攻击实例详解
2019/02/02 Python
django的csrf实现过程详解
2019/07/26 Python
Python @property使用方法解析
2019/09/17 Python
Python命令行click参数用法解析
2019/12/19 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
结婚仪式主持词
2015/06/29 职场文书
大学同学聚会感言
2015/07/30 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript