Я пытаюсь перебрать все теги <li>, содержащие класс .fas, с помощью метода jQuery contains () и выполнить некоторые действия для каждого из них.
$('li:contains(".fas")').each(function (index) {
//stuff
}
Я продолжаю получать справочную ошибку, которая содержит не определено. Я неправильно использую этот метод?
Ваш вопрос немного неоднозначен, но приведенный выше запрос возвращает все li, которые имеют класс fas. Это то, что вы ищете?
Нет, я пытаюсь получить все li, у которых есть наследник с классом .fas.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужен has().
$('li:has(".fas")').each(function (index) {
//stuff
}
Неопределенность вашего вопроса заставляет меня ответить на этот вопрос.
Прежде всего:
$('li.fas')
Это говорит движку sizzle: получите все элементы, которые имеют класс fas, затем уменьшите это до элементов li (которые имеют этот класс)
С пробелом между ними говорится:
$('li .fas')
Получите все элементы, которые имеют класс fas, затем уменьшите до тех, которые являются наследниками элемента li.
$('li>.fas')
Получите все элементы, которые имеют класс fas, затем уменьшите их, сделайте набор, который является прямыми дочерними элементами элемента li.
Другой ответ - это .has(), поэтому я не буду повторять это.
Фильтр: (в основном то же, что и: has () в этом случае
$('li').filter(function(){
// reduce the li set; return true when a descendant has the 'fas' class
return !!$(this).find('.fas').length;
});
Подробнее о контексте здесь: https://stackoverflow.com/a/16423239/125981
Ни один из этих вариантов не работает для li, которые содержат потомков с классом .fas.
@noclist Примечание Я добавил фильтр - из-за неоднозначности вопроса
Другой способ сделать это - перевернуть вашу логику.
$('.fas').closest('li');
Вы можете найти все фас, а затем найти их родительские списки.
Это будет запускать функцию для каждого случая, когда .fas является дочерним по отношению к li, что может привести к повторному выполнению. где у элемента списка есть несколько таких дочерних элементов.
Это верное заявление
Разве это не пройдет через все
.fas, у которых есть родительский элемент<li>? Я пытаюсь получить сами<li> ''