Есть что-то вроде этой разметки:

<section id="school_section" class="several classes and the class termid_[some number here]">
    <section class="several classes and the class termid_5 school_course_section"></section>
    <section class="several classes and the class termid_8 school_course_section"></section>
    <section class="several classes and the class termid_1 school_course_section"></section>
</section>

Необходимо получить termid_ основного раздела. Сравните классы дочерних разделов с полученным классом из основного раздела и, если такого класса нет, то скройте их.

Например, если section#school_section содержит класс termid_8, то в этом примере необходимо скрыть разделы termid_5 и termid_1.

jQuery(function ($) {
    var current_termID = $('#school_section').attr('class').match(/(?:\s|^)termid_(\d+)/)[1];
    if ($('.school_course_section').hasClass(current_termID) == '') {
        $(this).hide();
    }
});

Я сделал что-то подобное, но пока что не работает должным образом.

Буду признателен за любую помощь)

0
Sergey Pervushin 7 Окт 2021 в 20:30

2 ответа

Лучший ответ

Используйте [0], чтобы получить полное совпадение, которое включает префикс termid_.

Оператор if просто сообщает вам, есть ли какие-либо элементы с соответствующим классом, но не выбирает их. Используйте current_termID в селекторе, чтобы выбрать совпадающие элементы, и вызовите .hide() для этого.

jQuery(function($) {
  var current_termID = $('#school_section').attr('class').match(/\btermid_\d+/)[0];
  $(`.school_course_section:not(.${current_termID})`).hide();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="school_section" class="several classes and the class termid_8">
  <section class="several classes and the class termid_5 school_course_section">class 5</section>
  <section class="several classes and the class termid_8 school_course_section">class 8</section>
  <section class="several classes and the class termid_1 school_course_section">class 1</section>
</section>
2
Barmar 7 Окт 2021 в 17:41

Найдите термин в классе. Используйте это, чтобы отфильтровать совпадающие. Скрыть остальных

var elem = $("#school_section");
const term = elem[0].className.match(/(termid_\d+)/);
elem.children().not("." + term).hide();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="school_section" class="several classes and the class termid_8">
  <section class="several classes and the class termid_5 school_course_section">5</section>
  <section class="several classes and the class termid_8 school_course_section">8</section>
  <section class="several classes and the class termid_1 school_course_section">1</section>
</section>
1
epascarello 7 Окт 2021 в 17:40