事件冒泡及事件委托的理解(JQuery Dom操作)

jQuery事件冒泡:
click mouseenter 等事件没有绑定 也会触发,只是触发后没有任何结果

子元素触发事件后,会把触发事件传递给父元素,那么父元素也会被触发。
不管有没有绑定事件,都会触发事件,只是没有结果,事件冒泡传递还是会发生

系统自动产生的event事件对象
function传的第一个参数就是event事件对象

1 event.stopPropagation(); // 阻止事件冒泡
2 event.preventDefault() // 阻止默认行为 比如submit阻止表单提交
3
4 // 上面两个阻止 可以合并写成
5 return false;

事件委托:

事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

基本实现:

 1 $(function(){
 2     var $li = $(‘.list li‘);
 3     var $list = $(‘.list‘);
 4
 5     // 多次绑定,性能堪忧
 6     // $li.click(function(){
 7     //     $(this).css({‘background‘:‘red‘});
 8     // })
 9
10     // 事件委托方式 delegate(发生事件的元素, 事件属性, 匿名函数)
11     $list.delegate(‘li‘,‘click‘,function(){
12         $(this).css({‘background‘:‘red‘});
13     })
14
15 })

上述代码不能很好的体现事件委托的优势,下面引入Dom操作 综合体现事件委托的优势。

Dom操作:

Dom操作也叫做元素节点操作,它指的是改变html的标签结构,它有两种情况:
1、移动现有标签的位置
2、将新创建的标签插入到现有的标签中

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <script src="js/jquery-1.12.4.min.js"></script>
 9     <script>
10         $(function(){
11             var $div01 = $(‘#div01‘);
12             var $p01 = $(‘#p01‘);
13             var $h01 = $(‘#h01‘);
14             var $p02 = $(‘#p02‘);
15
16             // 当前元素里面的后面要放另外一个元素
17             // $div01.append($p01);
18
19             // 当前元素要放到另外一个元素的里面的后面
20             $p01.appendTo($div01);
21
22             // 当前元素里面的前面要放另外一个元素
23             // $div01.prepend($h01);
24
25             // 当前元素要放到另外一个元素里面的前面
26             $h01.prependTo($div01);
27
28
29             // 当前元素外面的后面要放另外一个元素
30             // $div01.after($p02);
31
32             // 当前元素要放到另外一个元素的外面的后面
33             $p02.insertAfter($div01);
34
35             // 创建一个空div标签
36             var $newdiv01 = $(‘<div>‘);
37
38             // 创建一个有内容的div标签
39             var $newdiv02 = $(‘<div>新创建的第二个div</div>‘);
40
41
42             // 当前元素外面的前面要放另外一个元素
43             $div01.before( $newdiv01 );
44
45             // 当前元素要放到另外一个元素的外面的前面
46             $newdiv02.insertBefore($div01);
47
48             // 删除标签
49             $newdiv01.remove();
50
51             $p01.remove();
52
53         })
54
55
56     </script>
57 </head>
58 <body>
59     <p id="p01">这是div01外面的p标签</p>
60     <h2 id="h01">这是div01外面的h2标题</h2>
61     <p id="p02">这是div01外面的第二个p标签</p>
62     <div id="div01">
63         <h3>这是div01里面的h3</h3>
64         <p>这是div01里面的p标签</p>
65     </div>
66 </body>
67 </html>

下面这个例子能体现事件委托的优势

 1 $(function(){
 2     var $txt = $(‘#txt1‘);
 3     var $btn = $(‘#btn1‘);
 4     var $list = $(‘#list‘);
 5
 6     // 增加计划
 7     $btn.click(function(){
 8         var sVal = $txt.val();
 9
10         // 清空输入框
11         $txt.val(‘‘);
12
13         // 判断输入框是否为空
14         if(sVal==‘‘){
15             alert(‘请输入内容!‘);
16             return;
17         }
18
19         // 创建一个包含计划内容的li标签
20         var $li = $(‘<li><span>‘+ sVal +‘</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>‘);
21         $li.appendTo($list);
22
23         /*
24         var $del = $li.find(‘.del‘);
25         $del.click(function(){
26             $(this).parent().remove();
27         });
28         */
29     })
30
31
32     // 删除功能:
33     /*
34     var $del = $(‘.del‘);
35     $del.click(function(){
36         $(this).parent().remove();
37     })
38     */
39
40     // 事件委托
41     $list.delegate(‘a‘,‘click‘,function(){
42         if($(this).hasClass(‘del‘)){
43             $(this).parent().remove();
44         }else if($(this).hasClass(‘up‘)){
45             if($(this).parent().prev().length==0){
46                 alert(‘到顶了已经‘);
47                 return false;
48             }
49             $(this).parent().insertBefore($(this).parent().prev());
50         }else{
51             if($(this).parent().next().length==0){
52                 alert(‘到底了已经‘);
53                 return false;
54             }
55             $(this).parent().insertAfter($(this).parent().next());
56         }
57     })
58 })

原文地址:https://www.cnblogs.com/lzc978/p/10113066.html

时间: 2024-10-14 08:25:09

事件冒泡及事件委托的理解(JQuery Dom操作)的相关文章

事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流

一.事件冒泡定义 事件冒泡是指在一个对象触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,甚至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层级的最顶层,即document对象(有些浏览器是window).. 二.事件冒泡的作用 事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元

javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。

首先,弄明白js 当中,什么是事件,事件模型在js中是如何设计的.什么是事件冒泡? 什么是“事件冒泡”呢?假设这里有一杯水,水被用某种神奇的方式分成不同颜色的几层.这时,从最底层冒出了一个气泡,气泡会一层一层地上升,直到最顶层.而你不管在水的哪一层观察都可以看到并捕捉到这个气泡.好了,把“水”改成“DOM”,把“气泡”改成“事件”.这就是“事件冒泡” 什么是事件委托呢?event delegation : 地址:http://davidwalsh.name/event-delegate One

JavaScript事件冒泡和事件委托

JavaScript事件冒泡和事件委托 付建宇 - 2 条评论 接触JavaScript不久,学的东西也不是特别多.小雨就是习惯把平时学到的东西拿出来分享.一方面加强自己的印象,一方面可以让自己的经验为他人答疑解惑.我们知道JavaScript可以监控页面上元素的各种事件,常用的事件有很多,例如点击,鼠标移入.移出,元素改变等等.这次主要说一下事件冒泡及其一个比较酷的应用,事件委托.不做特殊说明,以下都在jQuery框架内执行. 事件冒泡 什么是“事件冒泡”呢?假设这里有一杯水,水被用某种神奇的

js事件捕获,事件冒泡,事件委托以及DOM事件流

一:DOM事件流: 事件流是从页面接收事件的顺序,DOM2级事件规定事件流包括三个阶段: ①事件捕获阶段:用意在于事件达到目标之前捕获它,在事件捕获阶段事件流模型:document→html→body→div ②处于目标阶段2:实际的目标到事件 ③事件冒泡阶段:由最具体的元素接收到事件,然后向上传播到较为不具体的节点.事件流模型:div →body→ html→ document 二:事件委托 事件委托顾名思义:将事件委托给另外的元素.其实就是利用DOM的事件冒泡原理,将事件绑定到目标元素的父节

JavaScript之jQuery-4 jQuery事件(页面加载后执行、事件处理、事件冒泡、事件对象、模拟操作)

一.jQuery 页面加载后执行 代码执行的时机选择 - $(document).ready()方法和 window.onload事件具有相似的功能,但是在执行时机方面是有区别的 - window.onload 事件是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行 - $(document).ready()方法注册的事件处理程序,在DOM完全加载后就可以调用 - 一般来讲, $(document).ready()的执行要优于window.onload事件 - 需要注意的是,

JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4864367.html ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover--)首先发生在document上,然后依次传递给body.……最后到达目的节点(即事件目标). ● 事件冒泡:事件到达事件目标之后不会结束,会逐层向上冒泡,直至document对象,跟事件捕获相反 1.onlick -->事件冒泡,

事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

● 事件分为三个阶段:   事件捕获 -->  事件目标 -->  事件冒泡 ● 事件捕获:事件发生时(onclick,onmouseover--)首先发生在document上,然后依次传递给body.……最后到达目的节点(即事件目标). ● 事件冒泡:事件到达事件目标之后不会结束,会逐层向上冒泡,直至document对象,跟事件捕获相反 1.onlick -->事件冒泡,重写onlick会覆盖之前属性,没有兼容性问题 ele.onclik = null; //解绑单击事件,将onlic

DOM事件机制(事件捕获和事件冒泡和事件委托)

内容: 1.事件复习 2.事件冒泡与事件捕获 3.事件委托 1.事件复习 (1)事件 事件是用来处理响应的一个机制,这个响应可以来自于用户(点击, 鼠标移动, 滚动), 也可以来自于浏览器 下面的链接描述了所有事件:https://developer.mozilla.org/en-US/docs/Web/Events (2)事件绑定 事件绑定有3种方法,前两钟方法在这里不介绍,主要看第三种: addEventListener方法(使用事件监听绑定事件) addEventListener: 1 e

看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序

最近一个项目基于3维skyline平台,进行javascript二次开发.对skyline事件的设计真是无语至极,不堪折磨啊!抽空学习了下javascript和jquery的事件设计,收获颇大,总结此贴,和大家分享. (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在html文档中绑定.在js代码中绑定.下面的方式1.方式2属于在html中绑定事件,方式3.方式4和方式5属于在js代码中绑定事件,其中方法5是最推荐的做法. 方式1: HTML的DOM元素