Что не так с
$('[data-category*="'+category+'"]')
или
if ($(this).is('[data-category*="'+category+'"]')) { ... }
?
Первый shoudl выбирает все элементы, имеющие data-category
-атрибут, содержащий ваш category
(что подразумевает заголовок вашего вопроса, это то, чего вы хотите достичь), в то время как последний должен делать то же, что и ваши if
примеры в шве вопроса, которые вы пытаетесь предпринять.
И то, и другое также можно сделать в ванили JS btw:
let elementsWithAttr = document.querySelectorAll('[data-category*="'+category+'"]')
и
if (this.matches('[data-category*="'+category+'"]')) { ... }
Обновление:
Прочитав ваши комментарии, я хочу добавить еще одну функцию jQuery, которая может помочь здесь: если у вас уже есть список jQuery элементов, и вы просто хотите получить все из них, которые подтверждают другой селектор, вы можете использовать
list.filter('[data-category*="'+category+'"]')
вместо того, чтобы проходить по всем из них и проверять с if
.