проблема, связанная с фильтрацией изображений с jquery - PullRequest
0 голосов
/ 19 апреля 2020

Я работаю над проектом простой фильтрации изображений с jquery У меня есть атрибут данных под названием «data-genre», который содержит несколько значений

Пример: data-genre = "sci-fi, Police, тайна, психологическая "

, когда мой data-genre имеет одно значение, например data-genre =" action ", я могу фильтровать изображения, содержащие жанр action (путем выбора жанра action в поле выбора), но, как вы знаете, аниме может иметь несколько жанров, поэтому, когда я добавляю несколько значений, как в приведенном выше примере, в нем ничего не отображается. Я хочу, чтобы мой код jquery был таким, чтобы при выборе жанра полиции в поле выбора значение l oop было равно через эти несколько значений данных. жанр и отображать изображения с полицией жанр

Это мой исходный код

HTML КОД:


<!DOCTYPE html>
<html lang="en">
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>


<title>Anime Filter</title>
<style>
*{
margin: 0 auto;
padding: 0 auto
box-sizing: border-box;
}

.an-filterbar{
text-align: center;
margin: 50px;
}

.ps-page{
margin: 100px;
}

.ps-page .ps-links{
margin-left: 30px;
float: left;
text-align: center;
}

</style>
</head>
<body>
<div class="an-filterbar">
    <label for="an-search"><b>Type :</b></label>
      <select class="type">
        <option value="all">All</option>
        <option value="tvseries">Tv series</option>
        <option value="movie">Movie</option>
      </select>
        <br>
    <label for="an-search"><b>Genre :</b></label>
      <select class="genre">
        <option value="all">All</option>
        <option value="action">Action</option>
        <option value="adventure">Adventure</option>
        <option value="cars">Cars</option>
        <option value="comedy">Comedy</option>
        <option value="police">Police</option>
      </select>
      <br>
     <label for="an-search"><b>Year :</b></label>
      <select class="year">
        <option value="all">All</option>
        <option value="1990">1990</option>
        <option value="1991">1991</option>
        <option value="1992">1992</option>
        <option value="1993">1993</option>
        <option value="1994">1994</option>
      </select>
      <br>
     <label for="an-search"><b>Season :</b></label>
      <select class="season">
        <option value="all">All</option>
        <option value="winter">Winter</option>
        <option value="spring">Spring</option>
        <option value="summer">Summer</option>
        <option value="fall">Fall</option>
      </select>
      <br>
    <label for="an-search"><b>Status :</b></label>
      <select class="status">
        <option value="all">All</option>
        <option value="airing">Airing</option>
        <option value="finished">Finished</option>
        <option value="notyetaired">Not yet Aired</option>
      </select>
      <br>
</div>

<div class="ps-page">
<div class="ps-links" data-type="movie" data-genre="adventure, comedy, action" data-year="1990" data-season="summer" data-status="notyetaired">
  <a href="">
  <figure>
  <img src="assets/pimg-6.jpg" alt="Eizouken ni wa te wo dasu na">
  <figcaption>
  <b>Rating : N/R</b><br>
  Eizouken ni wa te wo dasu na
  </figcaption>
  </figure>
  </a>
  </div>
  <div class="ps-links" data-type="tvseries" data-genre="adventure, cars" data-year="1991" data-season="fall" data-status="airing">
  <a href="">
  <figure>
  <img src="assets/pimg-7.jpg" alt="Somali to mori no kamisama">
  <figcaption>
  <b>Rating : N/R</b><br>
  Somali to mori no kamisama
  </figcaption>
  </figure>
  </a>
  </div>
  <div class="ps-links" data-type="tvseries" data-genre="action, comedy, cars" data-year="1992" data-season="summer" data-status="finished">
  <a href="">
  <figure>
  <img src="assets/pimg-8.jpg" alt="Jibaku shounen hanako-kun">
  <figcaption>
  <b>Rating : N/R</b><br>
  Jibaku shounen hanako-kun
  </figcaption>
  </figure>
  </a>
  </div>
  <div class="ps-links" data-type="movie" data-genre="sci-fi, police, mystery, psychological" data-year="1993" data-season="spring" data-status="finished">
  <a href="">
  <figure>
  <img src="assets/pimg-9.jpg" alt="Plunderer">
  <figcaption>
  <b>Rating : N/R</b><br>
  Plunderer
  </figcaption>
  </figure>
  </a>
  </div>
  </div>
<script>
$("select.type, select.genre, select.year, select.season, select.status").change(updateCategories);

function updateCategories() {
  //get all the values
  var caType = $('select.type').val();
  var caGenre = $('select.genre').val();
  var caYear = $('select.year').val();
  var caSeason = $('select.season').val();
  var caStatus = $('select.status').val();

  $('.ps-page')
    .find('.ps-links')
    .hide()
    .filter(function () {
      var okcaType = true;
      if(caType !== "all"){
        okcaType = $(this).attr('data-type') === caType;
      }

      var okcaGenre = true;
      if(caGenre !== "all"){
        okcaGenre = $(this).attr('data-genre') === caGenre;
      }

      var okcaYear = true;
      if(caYear !== "all"){
        okcaYear = $(this).filter('data-year') === caYear;
      }

      var okcaSeason = true;
      if(caSeason !== "all"){
        okcaSeason = $(this).attr('data-season') === caSeason;
      }

      var okcaStatus = true;
      if(caStatus !== "all"){
        okcaStatus = $(this).attr('data-status') === caStatus;
      }

      //only fade a image if it satisfies all five conditions
      return okcaType && okcaGenre && okcaYear && okcaSeason && okcaStatus;
  }).fadeIn('fast');
}
</script>
</body>
</html>

попробуйте этот код и выберите один из жанров в поле выбора он не отображает никаких изображений

Я хочу, чтобы решение было таким, чтобы оно соответствовало моему коду (без изменения всего кода), и объяснение того, как оно работает.

1 Ответ

2 голосов
/ 19 апреля 2020

Вам нужно разделить атрибут data-genre на массив и проверить, существует ли выбранный жанр в этом массиве.

if (caGenre !== "all") {
                    var genreArray = $(this).attr('data-genre').split(",").map(function (item) { return item.trim(); })
                    okcaGenre = genreArray.indexOf(caGenre) !== -1;
                }

Здесь, как вы можете видеть, я разделил данные -генерация строка в массиве и удаление окружающих пробелов каждого элемента.

Обновленный код :

function updateCategories() {
        //get all the values
        var caType = $('select.type').val() || 'all';
        var caGenre = $('select.genre').val() || 'all';
        var caYear = $('select.year').val() || 'all';
        var caSeason = $('select.season').val() || 'all';
        var caStatus = $('select.status').val() || 'all';


        $('.ps-page')
            .find('.ps-links')
            .hide()
            .filter(function () {
                var okcaType = true;
                if (caType !== "all") {
                    okcaType = $(this).attr('data-type') === caType;
                }

                var okcaGenre = true;
                if (caGenre !== "all") {
                    var genreArray = $(this).attr('data-genre').split(",").map(function (item) { return item.trim(); })
                    okcaGenre = genreArray.indexOf(caGenre) !== -1;
                }

                var okcaYear = true;
                if (caYear !== "all") {
                    okcaYear = $(this).filter('data-year') === caYear;
                }

                var okcaSeason = true;
                if (caSeason !== "all") {
                    okcaSeason = $(this).attr('data-season') === caSeason;
                }

                var okcaStatus = true;
                if (caStatus !== "all") {
                    okcaStatus = $(this).attr('data-status') === caStatus;
                }

                //only fade a image if it satisfies all five conditions
                return okcaType && okcaGenre && okcaYear && okcaSeason && okcaStatus;
            }).fadeIn('fast');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...