Ошибка в логике метода
showElement
.
Вы добавляете id всегда в конец списка, а удаляете id по индексу положения div в списке, хотя не факт, что id именно в этом месте будет.
Например, кликнули по 3-му элементу, потом по второму, будет
selectedElArr = [2, 1]
, потом кликаете по 3-ему, чтобы его закрыть и метод захочет удалить
selectedElArr[2]
, а такого элемента даже нет. Ну и т.д.
Логичнее добавлять
selectedElArr[index]=true
и удалять
selectedElArr[index]=false
, если опираться на порядок div в списке. Ну и проверять потом так же
if (!!this.selectedElArr[index]) {
this.selectedElArr[index] = false;
} else {
this.selectedElArr[index] = true;
}}
Ну или одной строкой
this.selectedElArr[index] = !this.selectedElArr[index];
Если не опираться, то я бы добавил поле
data.isOpened
(isActive, isVisible и т.д.) и уже отталкивался от него, это мне кажется надежнее.