Ответ 1
Просто используйте метод .closest()
: $(this).closest('.li').remove();
Он начинается с текущего элемента, а затем поднимается вверх по цепочке, ища подходящий элемент, и останавливается, как только он находит его.
.parent()
обращается только к прямому родительскому элементу элемента, т.е. div.msg-modification
, который не соответствует .li
. Таким образом, он никогда не достигает элемента, который вы ищете.
Другое решение, помимо .closest()
(которое проверяет текущий элемент и затем поднимается вверх по цепочке) будет использовать .parents()
- однако в этом было бы предостережение о том, что он не останавливается, как только он находит соответствующий элемент (и он не проверяет текущий элемент, а только родительские элементы). В вашем случае это не имеет особого значения, но для того, что вы пытаетесь сделать, .closest()
- наиболее подходящий метод.
Еще одна важная вещь:
НИКОГДА использовать один и тот же идентификатор для нескольких элементов. Это не допускается и вызывает очень трудные для отладки проблемы. Удалите id="191"
из ссылки и, если вам нужно получить доступ к идентификатору в обработчике кликов, используйте $(this).closest('.li').attr('id')
. На самом деле было бы еще более чистым, если бы вы использовали data-id="123"
, а затем .data('id')
вместо .attr('id')
для доступа к нему (так что ваш идентификатор элемента не должен напоминать любой идентификатор строки (базы данных?))