Количество классов JQuery в HTML

У меня есть HTML, который получает ввод от пользователей. Моя работа состоит в том, чтобы подсчитывать карты, которые они вводят, и стилизовать эти карты. Карточки помещаются внутрь <section>.

Проблемы: Мой Jquery считает и работает только в одном разделе. Если пользователи заходят более чем в один раздел, код не работает. Мой код ниже показывает, когда пользователи входят в 2 раздела: карты в первом разделе должны быть синими, а карты во втором разделе должны быть красными, но теперь они все синие.

jsfiddle

var numCard = $('.cards').length;
if (numCard == "2") {
  /* $('.cards').css('color', 'red'); */
  $("section .cards").parent().addClass("two-cards");
} else if (numCard == "3") {
  $("section .cards").parent().addClass("three-cards");
} else {
  $('section .cards').parent().addClass("four-cards");
}
body {
  padding: 20px;
  font-family: Helvetica;
}

.two-cards .cards {
  color: red;
}

.three-cards .cards {
  color: green;
}

.four-cards .cards {
  color: blue;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
  <div class = "cards">
    First Card
  </div>
  <div class = "cards">
    Second Card
  </div>
  <div class = "cards">
    Third Card
  </div>
  <div class = "cards">
    Third Card
  </div>
</section>
<p>

  <section>
    <div class = "cards">
      First Card
    </div>
    <div class = "cards">
      Second Card
    </div>
  </section>
if (numCard == "2") Почему вы принудительно сравниваете целочисленную переменную со строкой?
Taplar 10.04.2019 16:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
1
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рабочая рабочий пример

Вам нужно просмотреть разделы, а затем использовать ключевое слово this для проверки:

$('section').each(function() {
  var numCard = $('.cards', this).length;

  if (numCard == "2") {
    $(this).addClass("two-cards");
  } else if (numCard == "3") {
    $(this).addClass("three-cards");
  } else {
    $(this).addClass("four-cards");
  }
});
body {
  padding: 20px;
  font-family: Helvetica;
}

.two-cards .cards {
  color: red;
}

.three-cards .cards {
  color: green;
}

.four-cards .cards {
  color: blue;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
  <div class = "cards">
    First Card
  </div>
  <div class = "cards">
    Second Card
  </div>
  <div class = "cards">
    Third Card
  </div>
  <div class = "cards">
    Third Card
  </div>
</section>
<p>
  <section>
    <div class = "cards">
      First Card
    </div>
    <div class = "cards">
      Second Card
    </div>
  </section>
</p>

Привет, Закария Ачарки, большое спасибо. Это хорошо работает!

abcid d 10.04.2019 16:57

Не за что, рад, что смог помочь. Если какой-либо ответ поможет вам проголосовать за него, если какой-либо ответ — это то, что вы ищете, отметьте его как правильный ответ Для будущих читателей.

Zakaria Acharki 10.04.2019 17:00

Я только что проголосовал за ваш ответ как за правильный. У меня вопрос: что означает (представляет) «это» в этом коде var numCard = $('.cards', this).length;?

abcid d 10.04.2019 17:40

Вы также можете проголосовать ЗА, это будет полезно, что угодно ( Это сокращение от var numCard = $(this).find('.cards').length;

Zakaria Acharki 10.04.2019 17:41

Другие вопросы по теме