1.立即调用的函数表达式
<script>
(function(){
})()
</script>
2.节点遍历
firstChild
lastChild
nextSibling
previousSibling
childNodes[]
childNodes.length-节点个数
firstElementChild
lastElementChild
nextElementSibling
previousElementSibling
children[]
childElementCount-节点个数
3.将类数组对象NodeList转化为数组对象Array
function makeArray(nodelist){
var arr = null;
try{
return Array.prototype.slice.call(nodelist);
}catch(e){
arr = new Array();
for(var i = 0, len = nodelist.length; i<len; i++){
arr.push(nodelist[i]);
}
}
return arr;
}
4.按钮绑定函数时函数不需要加括号
<script>
var btn = document.getElementById("btn");
function clickBtn(){
alert("我是按钮");
}
btn.onclick = clickBtn;
</script>
5.IE浏览器匿名函数中的this指向window
btn.attachEvent("onclick",function(){
alert(this === window);
});
6.Event对象属性及方法
- target:点击谁谁就是target,事件源
- currentTarget:事件绑定在谁身上,就是谁
<div id="parent">
<div id="child">点击</div>
</div>
<script>
var parent = document.getElementById("parent");
parent.addEventListener("click", function(event){
console.log(event.target);
console.log(event.currentTarget);
});
</script>
- clientY:浏览器顶部底边到鼠标位置,不计算滚动轴的距离
- pageY:浏览器顶部底边到鼠标位置,但是其计算滚动轴的距离
- screenY:【屏幕】顶部到鼠标位置
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style type="text/css">
#height{
height: 2000px;
background: lightgreen;
}
</style>
</head>
<body>
<div id="height"></div>
<script>
var height_ = document.getElementById("height");
height.addEventListener("click", function(event){
alert("clientY:"+event.clientY+";pageY"+event.pageY+";screenY"+event.screenY);
});
</script>
</body>
7.Event对象跨浏览器兼容性写法
<script type="text/javascript">
var EventUtil = {
addHandler:function(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if (element.attachEvent) {
element.attachEvent("on"+ type,handler);
} else{
element["on"+type] = handler
}
},
removeHandler: function(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false);
}else if (element.detachEvent) {
element.detachEvent("on"+type,handler);
} else{
element["on"+type] = handler
}
},
getTarget: function(event){
return event.target || event.srcElement;
},
preventDefault: function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
},
stopPropagation:function(event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}
}
</script>
<body>
<div id="parent">
<div id="child">点击我</div>
</div>
<a id="a" href="http://www.baidu.com">跳转链接</a>
<script type="text/javascript">
var parent = document.getElementById("parent");
EventUtil.addHandler(parent, "click", function(event){
alert("parent被触发了!");
});
var child = document.getElementById("child");
EventUtil.addHandler(child, "click", function(event){
alert("child被触发了!");
var target = EventUtil.getTarget(event);
console.log(target);
EventUtil.stopPropagation(event);
});
var a = document.getElementById("a");
EventUtil.addHandler(a, "click", function(event){
EventUtil.preventDefault(event);
});
</script>
</body>
8.鼠标事件-mouseover和mouseout、mouseenter和mouseleave
- mouseover:进入目标元素或者其子元素时候执行
- mouseout:离开目标元素或者子元素时候执行
EventUtil.addHandler(div, "mouseover", function(){
...
});
EventUtil.addHandler(div, "mouseout", function(){
...
});
- mouseenter:只能进入目标元素时候才去触发
- mouseleave:只能离开目标元素时候才去触发
EventUtil.addHandler(div, "mouseenter", function(){
...
});
EventUtil.addHandler(div, "mouseleave", function(){
...
});
9.keydown和keypress
...
<input type="text" id="myText"></input>]
...
.
...
var myText = document.getElementById("myText");
EventUtil.addHandler(myText, "keydown", function(event){
console.log(event.keyCode);
})
...
<input type="text" id="myText"></input>]
...
.
...
var myText = document.getElementById("myText");
EventUtil.addHandler(myText, "keypress", function(event){
console.log(event.charCode);
})
10.DOMContentLoaded和load
- DOMContentLoaded:在DOM树加载之后就会触发,不理会图像、js文件、css文件或者其他资源是否已经下载,所以速度比load快
EventUtil.addHandler(document, "DOMContentLoaded", function(event){
...
})