使用原生JS实现事件委托

事件委托是什么

把若干个节点上的相同事件的处理函数event listener绑定到它的父节点上去, 在父节点上统一处理,减轻对event listener的管理负担。

为什么要有事件委托

1.监听还不存在的元素或者已经存在的元素
2.减少监听器的个数

如何做到事件委托

1
<body>
2
  <button id="xxx">取号</button>
3
  <ul>
4
    <li>
5
      <ol id="yyy"></ol>
6
    </li>
7
  </ul>
8
  <script>
9
    let button = document.querySelector("#xxx");
10
    let yyy = document.querySelector('#yyy');
11
    button.addEventListener('click',function(){
12
      let number = parseInt(Math.random() * 100, 10);
13
      let li = document.createElement('li');
14
      let span = document.createElement('span');
15
      span.textContent = number;
16
      li.appendChild(span);
17
      yyy.appendChild(li);
18
    });
19
    yyy.addEventListener('click',function(e){
20
      let element = e.target;
21
      while(element.tagName !== "LI"){
22
        if(element === yyy){
23
          element = null;
24
          break;
25
        }
26
        element = element.parentNode;
27
      }
28
      element && element.remove()
29
    })
30
  </script>
31
</body>

用户先点击取号,再点击li元素或者span元素时,就执行ol元素的监听事件,把点击的li元素或span元素删除,不用监听每个元素,监听它们的父元素即可。