*これは、ターゲットクラスの子がイベントをトリガーできるように編集されました。詳細については、回答の下部を参照してください。*
アイテムが頻繁に追加および削除されるクラスにイベントリスナーを追加するための代替回答。これはon、イベントがリッスンしている子要素のセレクターを渡すことができるjQueryの関数に触発されています。
var base = document.querySelector('#base'); // the container for the variable content
var selector = '.card'; // any css selector for children
base.addEventListener('click', function(event) {
  // find the closest parent of the event target that
  // matches the selector
  var closest = event.target.closest(selector);
  if (closest && base.contains(closest)) {
    // handle class event
  }
});
フィドル:https : //jsfiddle.net/u6oje7af/94/
これはbase要素の子のクリックをリッスンし、クリックのターゲットにセレクターと一致する親がある場合、クラスイベントが処理されます。個々の要素にクリックリスナーを追加することなく、必要に応じて要素を追加および削除できます。これは、jQuery機能と同様に、このリスナーが追加された後に追加された要素であっても、それらすべてをキャッチします(内部的には多少似ていると思います)。
これは、伝播するイベントに依存するため、stopPropagation他の場所でイベントに参加している場合、これは機能しない可能性があります。また、このclosest関数にはIEとの互換性の問題があるようです(そうでないことは?)。
このタイプのアクションを繰り返し聞く必要がある場合は、これを関数にすることができます。
function addChildEventListener(base, eventName, selector, handler) {
  base.addEventListener(eventName, function(event) {
    var closest = event.target.closest(selector);
    if (closest && base.contains(closest)) {
      // passes the event to the handler and sets `this`
      // in the handler as the closest parent matching the
      // selector from the target element of the event
      handler.call(closest, event);
    }
  });
}
========================================= 
編集:この投稿はもともとmatches関数を使用しましたイベントターゲットのDOM要素。ただし、これにより、イベントのターゲットが直接クラスのみに制限されました。closest代わりに関数を使用するように更新され、目的のクラスの子のイベントでもイベントをトリガーできるようになりました。元のmatchesコードは元のフィドルで見つけることができます:https :
 //jsfiddle.net/u6oje7af/23/