Jquery. Как сделать поиск в уже найденных элементах? Делаю фильтр на плагине Quicksand. И будет несколько групп параметров для поиска (предмет, класс школьников, уровень подготовки и т.д.) Есть у меня контейнер с объектами для поиска (учебные курсы).var $courses = $('#coursesContainer'); Клонирую контейнер.var $data = $courses.clone(); Все курсы.$filteredData = $data.find('.course'); Потом пытаюсь найти во всем списке курсов только курсы по алгебре.$filteredData = $filteredData.end().find(.course[data-subject="Алгебра"]'); Затем в найденных курсах по алгебре хочу найти курсы только для 7-го класса.$filteredData = $filteredData.end().find(.course[data-class="7"]'); Однако поиск по классам работает криво. Ищет не в уже найденных курсах по алгебре, а во всех курсах целиком. Т.е. в результате поиска получаю все курсы для 7-го класса. Что делаю не так?
Проблема возникает из-за того, что метод find() ищет элементы внутри всех элементов в наборе, а не только в последнем найденном элементе. Для того чтобы выполнить поиск только в уже найденных элементах, можно воспользоваться методом filter(). Примерно так:
// Начальное клонирование контейнера var $courses = $('#coursesContainer'); var $data = $courses.clone(); // Поиск курсов по алгебре var $filteredData = $data.find('.course[data-subject="Алгебра"]'); // Фильтрация найденных курсов по классу 7 $filteredData = $filteredData.filter('.course[data-class="7"]');
Таким образом, в переменной $filteredData останутся только курсы по алгебре для 7-го класса.
Проблема возникает из-за того, что метод find() ищет элементы внутри всех элементов в наборе, а не только в последнем найденном элементе. Для того чтобы выполнить поиск только в уже найденных элементах, можно воспользоваться методом filter(). Примерно так:
// Начальное клонирование контейнераvar $courses = $('#coursesContainer');
var $data = $courses.clone();
// Поиск курсов по алгебре
var $filteredData = $data.find('.course[data-subject="Алгебра"]');
// Фильтрация найденных курсов по классу 7
$filteredData = $filteredData.filter('.course[data-class="7"]');
Таким образом, в переменной $filteredData останутся только курсы по алгебре для 7-го класса.