Поэтому я думаю, вам следует рассмотреть возможность использования $ .closest () вместо $ .parents () . Но сначала, как всегда, нужно знать, с чем вы имеете дело — ключевое различие между ними.
.closest () | .родители() |
---|---|
Начинается с текущего элемента | Начинается с родительского элемента |
Перемещается вверх по дереву DOM, пока не найдет совпадение для поставляемого селектора | Перемещается вверх по дереву DOM к корневому элементу документа, добавляя каждый элемент-предок во временную коллекцию; Затем он фильтрует эту коллекцию на основе селектора, если он указан |
Возвращенный объект jQuery содержит ноль или один элемент для каждого элемента в исходном наборе. | Возвращенный объект jQuery содержит ноль или более элементов для каждого элемента в исходном наборе. |
Этот jsperf показывает результаты скорости.
Получить родительский контейнер с помощью $ .parents ()
Пример кода.
//remove handler
$('.btn.remove').on('click', _this.cache.$container, function(e)
{
e.preventDefault();
console.log('remove...');
$(this).parents('li').first().remove();
});
Получить родительский контейнер, используя $ .closest ()
Пример кода.
//remove handler
$('.btn.remove').on('click', _this.cache.$container, function(e)
{
e.preventDefault();
console.log('remove...');
$(this).closest('li').remove();
});