1. После срабатывания этой строки, пропадает слушатель:
table.innerHTML += `<tfoot><tr id="total-price"><td colspan="3">Total price:
${shop.totalProductsPrice}</td></tr></tfoot>`;
Вызов
table.innerHTML += some;
, равносилен
table.innerHTML = table.innerHTML + some;
- Сначала ваш html приводится к строке и складывается с новой строкой.
- Затем результат парсится и создаются новые элементы.
- Они добавляются в таблицу, на место старых.
- Слушателей на них естественно нет.
Из-за этой же строки возникает проблема 2. Так как, каждый раз добавляется новый футер, а удаляете вы только строки с классом .data.
3. Причина в
вашем приведении строки к числу. Для пустой строки оно возвращает NaN. Выражение
NaN === ""
возвращает false.