js 小贴士一星期合集_javascript技巧

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>

时间: 2024-11-05 14:58:11

js 小贴士一星期合集_javascript技巧的相关文章

JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集_javascript技巧

本文实例讲述了JS实现的仿东京商城菜单.仿Win右键菜单及仿淘宝TAB特效.分享给大家供大家参考.具体如下: 这是一个非常好的实用菜单整合特效,有多级下拉菜单.仿东京商城的拉出式菜单.仿Windows的右键菜单,仿淘宝的标签Tab菜单,每一个都是精彩,代码中附有丰富的注释,便于你的学习和修改. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-f-jd-taobao-win-rbutton-tab-demo/ 具体代码如下: <!DOCTYP

小咖秀视频合集制作图文教程

1.在小咖秀界面点击"个人中心"后找到"制作合集",然后我们就可以对视频进行合并了,可以是本地视频也可以上网上视频了,如图: 2.如我们可以选择2-9段要合并的视频,点击"下一步",然后对视频进行剪辑操作,如图: 3.视频处理好了再点击"下一步",然后我们可以保存在本地,也可以直接发布到网上: 好了这样小咖秀视频合集制作教程也就介绍完了,其实操作非常的简单因为软件提供了功能并且视频我们可以网上找,只是视频编辑顺需要一些时间了.

js字符串操作总结(必看篇)_javascript技巧

字符方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>字符方法</title> </head> <body> <script type="text/javascript"> /* charAt方法和charCodeAt方法都接收一个参数,基于0的

基于slideout.js实现移动端侧边栏滑动特效_javascript技巧

HTML5现在本领太大了,PC端已经无法满足它的胃口了,它将强势攻入移动端,所以移动端中各种特效也得基于HTML5实现,看看我们将要介绍的slideout.js,能帮我们实现怎么样的侧边栏滑动特效呢 先看下运行效果: 一.准备资料 只需要准备slideout.js库即可: https://github.com/Mango/slideout/blob/master/dist/slideout.js 小图标: 二.实现代码 HTML代码: <!doctype html> <html lang

js图片翻书效果代码分享_javascript技巧

这是一款基于javascript实现图片翻书效果代码,图片可以从左右两个方向进行切换,用户还可以自定义对应图片的标题与文字说明,是一款非常实用的图片特效源码. 七夕情人节也可以是表白的神器,放一些回忆的照片,还可以永久保存,是不是很有心意,推荐给大家,有需要的小伙伴可以学习学习. 运行效果图: 大家可以先运行一下    -------------------------------------效果运行----------------------------------------- 为大家分享的

JS简单实现表格排序功能示例_javascript技巧

本文实例讲述了JS简单实现表格排序功能的方法.分享给大家供大家参考,具体如下: 思路:遍历每个li,并把它们存放到数组中去,然后通过sort()方法进行排序,再插入 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="htt

两种JS实现屏蔽鼠标右键的方法_javascript技巧

JS屏蔽鼠标右键的两种方法,比较常用的一个JS小功能,用上这个代码后,浏览者在访问你网页的时候就不能点击右键了,点了也不会弹出右键菜单,本功能最好不要用的太多哦,有时候用户会反感的. 代码如下: <html> <head> <title>屏蔽鼠标右键</title> </head> <body oncontextmenu=self.event.returnvalue=false> 第一种方法:在body标签里加上oncontextme

js如何改变文章的字体大小_javascript技巧

最近发现有许多朋友提问:使用js如何改变一篇文章的字体的大小? 小编查阅了相关文章,为大家整理了几个小案例,供大家参考,具体内容如下 效果图: 点击大.小按钮,随时切换字体大小 具体代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>使用js如果改变一篇文章字体的大小</ti

js数组操作方法总结(必看篇)_javascript技巧

判断数值数组中各个数字出现的奇偶次数 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>数组操作</title> </head> <body> <script type="text/javascript"> var arr=[3,1,2,2,1,3,1