Это структура HTML у меня есть:Фильтр вложенных DIV с JQuery
<div class="day">
<div class="date">
...
</div>
<div class="event-container">
<div class="event">...</div>
<div class="event">...</div>
...
<div class="event">...</div>
</div>
</div>
Я хочу, чтобы фильтровать эту структуру, содержание .event
. Если какое-либо из слов в поисковом запросе отсутствует в элементе .event
, оно должно быть скрыто. Если все .event
s в .event-container
скрыты, весь .day
должен быть скрыт.
Вот моя попытка:
var terms = query.split(" ");
$('.day').each(function() { //iterate over days
var matches = false; //does the day contain a valid event?
$(this).find('.event').each(function() { //iterate over events of this day
var evMatches = true; //does this event contain all terms?
$.each(terms, function (index, term) { //iterate over terms
if ($(this).text().search(new RegExp(term, "i")) < 0)
evMatches = false; //if any term isn't found, element is invalid
});
if (evMatches) //if event contained query
{
matches = true; //day contains valid event
$(this).show();
}
else
$(this).hide();
});
if (matches) //if day contains valid event
$(this).show();
else
$(this).hide();
});
Я получаю "Uncaught RangeError: Максимальный размер стека вызовов превышена".
Я считаю, что делаю что-то не так в $.each(terms, ...)
или $(this).find('event-entry').each(...)
, потому что я недостаточно понимаю эти утверждения, просто пытаясь объединить это из примеров и документов jquery.
Ах, 'this' внутри моего' $ .each' было то же самое как срок, правильно? Благодаря! –
Есть ли какое-либо соглашение или причина, по которой вы храните '$ (this)' в переменных, начинающихся с '$' like '$ day'. –
нет ... это даже не то же самое, что и термин. Префикс '' 'является обычно используемым соглашением, которое позволяет вам знать, что это объект jQuery – charlietfl