- DOM事件流: HTML元素产生一个事件时, 该事件在该元素节点与根节点之间的路径传播的过程, 在此过程当中,全部节点都会收到此事件
- DOM事件流三个阶段:
- 事件捕获阶段:事件由document逐级向下,由外向内
- 目标阶段:
- 事件冒泡阶段: 事件由目标节点逐级向上,由内向外
- 添加事件 & 删除事件
-> addEventListener() && remove Event Listener() -> 参数一: 要处理的事件 -> 参数二: 事件处理的函数 -> 参数三: 布尔值 默认false -> 事件冒泡阶段[目的: 最大限度的兼容各个浏览器] 修改true -> 事件捕获阶段
// 1. 冒泡排序 <script> function sort(arr) { for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } var arr1 = sort([1, 4, 2, 9]); console.log(arr1); var arr2 = sort([11, 7, 22, 999]); console.log(arr2); </script>
// 2. 选择排序 <script> var arr = [10, 6, 18, 33, 2, 17]; // 执行思路: // 1. 先假设数组的第一个元素最小,而后取找后面的元素有没有比它更小的, // -> 若是有, 记录它的下标,找到后将他们两的位置交换 // 2. 接下来 认为数组的第二个数字最小, 而后取找后面的元素有没有比它更小的, // -> 若是有, 记录它的下标,找到后将他们两的位置交换 // ...依次类推 for (var i = 0; i < arr.length - 1; i++) { var arrMin = i; for (var j = 1 + i; j < arr.length; j++) { if (arr[arrMin] > arr[j]) { arrMin = j; } } // 交换位置 var temp = arr[i]; arr[i] = arr[arrMin]; arr[arrMin] = temp; } console.log(arr); // [2, 6, 10, 17, 18, 33] </script>
// 1. 原生js事件委托原理: 给父节点添加侦听器, 利用事件冒泡影响每个子节点 var ul = document.querySelector('ul'); ul.addEventListener('click', function(e) { // e.target 这个能够获得咱们点击的对象 e.target.style.backgroundColor = 'pink'; }) // 2. jquery事件委派 $("ul").on("click", "li", function(e) { console.log(11); // 此时里面的e.target 和 this 同样 });
- 利用事件冒泡的原理, 让子元素所触发的事件, 让其父元素代替执行
- 能够大量节省内存占用, 减小事件注册, 提升网页性能
- 动态生成的元素绑定事件
// 1. 原生js排他: // -> 先干掉全部人的样式, // -> 再给本身添加样式 for(var i = 0; i < dom.length; i++){ dom[i].style.color = ''; } this.style.color = 'red'; // 2. jquery排他: // 给其余兄弟移除类,给本身添加类 // 隐式迭代 + 链式编程 $(this).addClass('active').siblings('a').removeClass('active')