Ваш селектор #recipe-card div
на самом деле не делает то, что вы хотите. Вместо того, чтобы захватывать первый div внутри карты, он захватывает все div внутри карты.
Кроме того, вам следует избегать повторного использования одного и того же идентификатора для нескольких карт и использовать что-то вроде роли данных. Предполагается, что идентификаторы являются уникальными, поэтому использование нескольких идентичных идентификаторов обычно является плохой практикой.
Если вы вместо этого использовали что-то вроде data-role="recipe"
, вы можете использовать этот селектор:
$('div[data-role="recipe"] div:first)
ИЛИ просто поместите роль данных на свой внутренний блок и просто выберите этот элемент специально.
Это может решить не все ваши проблемы, но начните с этого и дайте мне знать, если что-нибудь останется.
Нижеприведенное решение JS было добавлено OP, и это помечено как правильный ответ:
<script>
$(document).ready(function() {
$("#searchbox").on("keyup", function() {
var value = $(this).val().toLowerCase();
$('div[data-role="recipe"]').filter(function() {
$(this).toggle($(this).find('h5').text().toLowerCase().indexOf(value) > -1)
});
});
});
</script>