Как удалить всех слушателей событий определенных элементов без дочерних

Просто используйте параметр value вместо method:

In [20]: df
Out[20]:
  Cat1      Cat2  Day
0  cat     mouse    1
1  dog  elephant    2
2  cat     giraf    3
3  NaN       ant    4

In [21]: df.Cat1 = df.Cat1.fillna(value=df.Cat2)

In [22]: df
Out[22]:
  Cat1      Cat2  Day
0  cat     mouse    1
1  dog  elephant    2
2  cat     giraf    3
3  ant       ant    4
-2
задан YakovL 26 April 2019 в 17:48
поделиться

2 ответа

Я наконец-то начал работать, используя пространства имен как on('click.namespace', function(){...}). Спасибо за помощь, ребята!

0
ответ дан Rok 26 April 2019 в 17:48
поделиться

Полагаю, вы видели ответы, такие как , этот , поскольку вы упоминаете, что не удаляете прослушиватели событий на дочерних элементах. Конечно, выполнить глубокое клонирование не получится, но что может сработать, так это создать неглубокое клонирование, а затем перенести дочерние узлы в клон. Это немного больше работы, но она будет делать то, что вы хотите.

Основная работа находится в setTimeout, все остальное на самом деле просто настройка.

Здесь я присоединяю два прослушивателя событий щелчка: один к кнопке и один к контейнеру div. до 5 секунд setTimeout, нажатие кнопки запустит обоих слушателей (поэтому вы увидите журналы консоли для КНОПКИ и DIV). После таймера вы все равно увидите событие BUTTON.

var rem = document.getElementById('rem');
var btn = document.getElementById('btn');
function onClick(e) {
  var t = e.currentTarget
  console.log(t.tagName);
}
rem.addEventListener('click', onClick);
btn.addEventListener('click', onClick);

setTimeout(() => {
  console.log('removing events from div');

  // shallow clone
  var rem2 = rem.cloneNode(false);

  // make and extract range to doc fragment 
  // for all contents of original div
  var range = document.createRange(); 
  range.setStartBefore(rem.firstChild);
  range.setEndAfter(rem.lastChild);
  var documentFragment = range.extractContents();

  // append doc fragment to clone
  // insert clone and remove old div
  rem2.appendChild(documentFragment);
  document.body.insertBefore(rem2, rem);
  rem.remove();
}, 5000);
<div id='rem'>
  <h3>Heading</h3>
  <button id='btn'>click me</button>
  <p>paragraph <b>bold</b> stuff</p>
</div>

0
ответ дан David784 26 April 2019 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: