Все, что изменяется между условиями, это число в классе. Таким образом, вы можете использовать selectedIndex
выбранного option
для нацеливания на этот элемент, например:
$('select.conditional-element-selector').on('change', function() {
var targetIndex = this.selectedIndex + 1;
$('.conditional-element-' + targetIndex).toggleClass("hide-conditional-element");
$('[class*=conditional-element-]:not(.conditional-element-selector, .conditional-element-' + targetIndex + ')').addClass("hide-conditional-element");
});
Обратите внимание, что вы можете указать несколько селекторов для :not()
, разделяя их запятой.
Я бы также предложил использовать общий класс для всех целевых элементов, который вы можете использовать вместо [class*=conditional-element-]
.
Наконец, если все классы conditional-element-N
являются инкрементными и совпадают с После индексации элементов option
вы можете полностью избавиться от классов и связать элементы по их индексу, что дает вам гораздо более простой и понятный код. Как то так:
$('select.conditional-element-selector').on('change', function() {
$('.conditional-element').hide().eq(this.selectedIndex).show();
}).trigger('change');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="conditional-element-selector">
<option value="select-element-1">Option 1</option>
<option value="select-element-2">Option 2</option>
<option value="select-element-3">Option 3</option>
<option value="select-element-4">Option 4</option>
</select>
<div class="conditional-element">Element 1</div>
<div class="conditional-element">Element 2</div>
<div class="conditional-element">Element 3</div>
<div class="conditional-element">Element 4</div>