У меня есть некоторые дивы, как это:JQuery выбрать элемент путем сопоставления слов в данных атрибутов
<div class="item item1" data-tags="sky,sea,roads"></div>
<div class="item item2" data-tags="sea"></div>
<div class="item item3" data-tags="sky,roads"></div>
<div class="item item4" data-tags="roads"></div>
Я пытаюсь сделать фильтр с JQuery, так что если я выбираю «небо», только item1
и item3
будет видимый. Вот что я пытался:
$('body').on('click', '.photo-gallery > nav > ul > li > a', function (event) {
var tag = $(this).data('tag');
$('.item').not('.item[data-tags^="'+tag+'"]').fadeOut();
$('.item[data-tags^="'+tag+'"]').fadeIn();
});
Это работает, если значения атрибута data-tags
совершенно уникальны, как мой пример выше. Но я знаю, что это не будет работать, если теги что-то вроде этого:
<div class="item item1" data-tags="skyteck,sea,roads"></div>
<div class="item item2" data-tags="sky,blue sea,loanly roads"></div>
Теперь, если я выбираю «небо» он получит бот item1 и item2, поскольку они оба матча «небо». Как я могу решить эту проблему?
У меня есть идея решить эту проблему, которая выбирая все элементы, а затем для каждого элемента создайте теги, разделенные запятыми, как массив, а затем проверьте, находится ли мой тег в этом объекте. Это будет работать, но будет несколько медленным. Это будет мой последний вариант.
не могли бы вы добавить HTML код блока фотогалереи? –
Как часто вам приходится делать этот поиск? Я бы ожидал, что вы, вероятно, просто прекратите разделять теги на массивы и просматривать их, если вы делаете это только несколько раз. Атрибут использования – andyg0808
содержит селектор типа '$ ('. Item [data-tags * ="' + tag + '"]')'. Единственное, что вам нужно иметь в виду, это будет относиться к тегу как 'sky' и' bluesky' как к одному. – vijayP