DOM笔记
事件委托
利用事件冒泡机制,委托事件给父级元素,比监听每个子元素的事件性能好。
html
<div style="height: 100px;">
<ul>
<li>1</li>
<li>2</li>
</ul>
</div>
js
function foo(e) {
if (e.target.nodeName.toLowerCase() === 'li') {
e.target.style.background = '#000';
}
}
document.querySelector('div').addEventListener('click', foo)
监听div内容修改
1.DOM2级中的mutation(变动事件)里的 DOMSubtreeModified 可以监听div内容修改
document.querySelector('.element').addEventListener('DOMSubtreeModified', function(){
alert(this);
});
2.MutationObserver构造函数可以监听div内容修改
//兼容性
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var node = document.getElementById('node'); //配置信息
var config = {
subtree: true, //监听目标节点包括后代节点
childList: true, //监听目标节点的子节点是否增加或者移除
attributes: true, //监听目标节点的attributes属性的增删改
characterData: true //如果监听的目标节点是文本节点,同时监听节点的文本内容
} //回调函数
var func = function(re) {
alert("success");
console.log(re);
} //生成实例
var server = new MutationObserver(func); //调用配置信息和回调函数
server.observe(node, config);
事件监听会传入一个event对象。
1.当事件绑定在触发的元素上,触发元素时,event.currentTarget 和 event.target 和 this 都指向这个元素。
例:
var btn = document.getElementById("nowBtn");
btn.onclick = function(e) {
console.log(e.currentTarget === this); //true
console.log(e.target === this); //true
}
如果绑定在当前元素的父级元素,触发元素时,event.currentTarget 和 this 都指向这个父级元素。 event.target 则指向触发的元素。
例:
document.body.onclick = function(e) {
console.log(event.currentTarget === document.body); //true
console.log(this === document.body); //true
console.log(event.target === document.getElementById("nowBtn")); //true
}
2.需要绑定多个事件时,可以利用event.type属性
var btn = document.getElementById('myBtn');
var handler = function(e) {
switch(e.type) {
case "click":
console.log("click");
break;
case "mouseover":
event.target.style.backgroundColor = "#333";
break;
case "mouseout":
event.target.style.backgroundColor = "#000";
break;
}
}
btn.onclick = handler;
btn.addEventListener("mouseover",handler);
btn.onmouseover = handler;
3.event.preventDefault()可以阻止元素的默认行为。
如<a>元素默认行为是导航到href的URL,用事件处理就可以取消它(需要event.cancelable为true,默认为true)。
var link = document.getElementById('myLink');
link.onclick = function(e) {
e.preventDefault();
};
4.event.stopPropagation()用来阻止捕获及冒泡。
var btn = document.getElementById('myBtn');
btn.onclick = function(e) {
console.log("click");
event.stopPropagation(); //执行完后阻止冒泡到body的click事件
};
document.body.onclick = function(e) {
console.log('body click');
};
keyCode可以直接转换成大写字母和数字
回车等特殊键无法转换,符号转换错误。
var key;
document.getElementById('element').addEventListener('keydown', function(e){
key = e.keyCode;
})
key = String.fromCharCode(key);
HTML5事件
1.监听contextmenu事件用preventDefault()方法阻止冒泡后,可以阻止右键弹出的上下文菜单。这个事件是冒泡事件,监听document可以阻止所有元素的contextmenu事件。
2. haschange事件可以监听URL参数变化(主要用于Ajax),这个事件只能添加给window对象。此时的 event 会多出 oldURL 和 newURL,例:
window.addEventListener('haschange',function(e){
console.log(e.oldURL);
console.log(e.newURL);
})
DOM笔记的更多相关文章
- DOM笔记(十):JavaScript正则表达式
一.RegExp ECMAScript通过RegExp类型类支持正则表达式,语法和Perl类似: var exp = /pattern/flags; patternb部分是任何简单的或复杂的正则表达式 ...
- DOM笔记(七):开发JQuery插件
在上一篇笔记本中,讲解了如何利用jQuery扩展全局函数和对象:DOM笔记(六):怎么进行JQuery扩展? 在这篇笔记本中,将开发一个简单的动画插件,名称是example-plugin,用其实现一个 ...
- DOM笔记(五):JavaScript的常见事件和Ajax小结
一.常见事件类型 1.鼠标事件 事件名称 说明 onclick 鼠标单击时触发 ondbclick 鼠标双击时触发 onmousedown 鼠标左键按下时触发 onmouseup 鼠标释放时触发 on ...
- DOM笔记(四):HTML 5 DOM复杂数据类型
HTML 5 DOM定义了一下集合.列表等复杂的数据类型用于实现便捷的操作.相对于HTML 4 DOM,HTML 5 DOM增加了HTMLCollection.DOMTokenList.DOMStri ...
- DOM笔记(三):Element接口和HTMLElement接口
一.Element接口 Element接口表示一个元素,该接口扩展自Node接口,自然继承了Node接口的属性和方法,也有一套针对元素的属性和方法. Element接口常见的属性比较少,常用的就是一个 ...
- DOM笔记(二):Node接口
所有的节点都使用Node接口来表示,可以使用很多方法去获取节点,如document.getElementsByTagName().document.getElementsByName()等均返回一个N ...
- DOM笔记(一):HTMLDocument接口
操作HTML文档的第一步就是获取对文档元素的引用,每一个元素在DOM中就是一个节点,所有的元素在DOM中构成一个节点树. 用于获取元素节点定义的方法定义于HTMLDocument接口,window.d ...
- DOM笔记(十):JavaScript正則表達式
一.RegExp ECMAScript通过RegExp类型类支持正則表達式,语法和Perl类似: var exp = /pattern/flags; patternb部分是不论什么简单的或复杂的正則表 ...
- DOM笔记(十三):JavaScript的继承方式
在Java.C++.C#等OO语言中,都支持两种继承方式:接口继承和实现继承.接口继承制继承方法签名,实现继承则继承实际的方法和属性.在SCMAScript中,由于函数没有签名,所以无法实现接口继承, ...
- DOM笔记(十二):又谈原型对象
因为之前谢过一篇关于原型对象的笔记:浅谈JavaScript中的原型模式.现在我又重新看到这个话题,对原型有了进一步的理解,所以,又要谈谈原型对象. 一.理解原型对象 创建的每一个函数都有一个prot ...
随机推荐
- Hadoop学习笔记: 安装配置Hive
1. 在官网http://hive.apache.org/下载所需要版本的Hive,以下我们就以hive 2.1.0版为例. 2. 将下载好的压缩包放到指定文件夹解压,tar -zxvf apache ...
- UIAlertController警告视图和操作表单
//创建一个myAlert1操作表单对象(UIAlertControllerStyleActionSheet为操作表单,UIAlertControllerStyleAlert为警告视图) UIAler ...
- paper 131:【图像算法】图像特征:GLCM【转载】
转载地址:http://www.cnblogs.com/skyseraph/archive/2011/08/27/2155776.html 一 原理 1 概念:GLCM,即灰度共生矩阵,GLCM是一个 ...
- C#先序遍历2叉树(非递归)
找了下先序遍历二叉树C# 实现貌似没有 顺手些了一个 大致思路是: 传入根节点,然后依次循环其子节点推入到栈中, 当推入的节点没有子节点的时候(叶子)或者所有子节点均已经遍历过后(上一次遍历的节点是该 ...
- MVC中使用jquery uploadify上传图片报302错误
使用jquery uploadify上传图片报302错误研究了半天,发现我上传的action中有根据session判断用户是否登录,如果没有登录就跳到登陆页,所以就出现了302跳转错误.原来更新了fl ...
- 怎么在js中,访问viewbag,viewdata等等的值
在js中要访问viewbag,viewdata存储的值, var ss='@ViewBag.name'; 一定要加引号,单双随便,还有, ViewBag一定要写规范,不然会编译错误! 成功者的秘诀就是 ...
- gTest详解
1. 安装使用 1.1 安装 在https://code.google.com/p/googletest/ 下载源码 进入msvc, 注意编译方式, 如果是dll, 选择 gtest-md 编译生成l ...
- win10安装oracle 11g 报错 要求的结果: 5.0,5.1,5.2,6.0 6.1 之一 实际结果: 6.2
Windows10下安装Oracle11G.10G,都会提示如下信息 正在检查操作系统要求... 要求的结果: 5.0,5.1,5.2,6.0 之一 实际结果: 6.1 检查完成.此次检查的总体结果为 ...
- mysql 性能优化方案1
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
- Beginner's Guide to Python-新手指导
Refer English Version: http://wiki.python.org/moin/BeginnersGuide New to programming? Python is free ...