Лучшая практика для скрытия / отображения нескольких разделов с помощью jQuery

#javascript

#javascript

Вопрос:

Предположим, у меня есть несколько разделов, между которыми я хочу разрешить пользователям переключаться. Я бы написал функции, подобные этой:

 show_A = function () {$('.a').show(); $('.b').hide(); $('.c').hide();}
show_B = function () {$('.a').hide(); $('.b').show(); $('.c').hide();}
show_C = function () {$('.a').hide(); $('.b').hide(); $('.c').show();} 
  

Затем прикрепите эти функции к ссылкам или чему-то еще. Какова наилучшая практика для абстрагирования такого поведения? Общий объем кода увеличивается на N ^ 2 с увеличением количества divs, что никуда не годится.

Ответ №1:

Дайте всем тем разделам, которые вы хотите скрыть, общее имя класса, а затем покажите один из них. Нравится:

HTML:

 <div class="a toggle">a div</div>
<div class="b toggle">b div</div>
<div class="c toggle">c div</div>
  

Теперь js:

 show_A = function () {$('.toggle').hide(); $('.a').show();}
show_B = function () {$('.toggle').hide(); $('.b').show();}
show_C = function () {$('.toggle').hide(); $('.c').show();}
  

Ответ №2:

Способ, которым я справлялся с этим раньше, заключался в том, чтобы просто скрыть их все, а затем показать тот (или те), который вы хотите видеть.

Что-то вроде…

 var showSingleDiv = function(klass) {
    $('.container > div').hide();
    $(klass).show();
};
  

Конечно, вы не хотите скрывать все div , поэтому вам нужно будет настроить все, что .container есть, с вашей собственной разметкой.

Ответ №3:

При каждом нажатии вы могли бы скрывать все разделы, а затем показывать только тот, который вам нужен.

Вы могли бы использовать класс для пометки соответствующих разделов…

 <div id="a" class="collapse">...</div>
<div id="b" class="collapse">...</div>
<div id="c" class="collapse">...</div>
  

И использовать:

 $(".collapse").hide();
  

Ответ №4:

Вы можете сделать что-то подобное, добавив общий класс ко всем этим элементам:

 <div class="toggle">a</div>
<div class="toggle">b</div>
<div class="toggle">c</div>

$('.toggle').click(function(){
    $('.toggle:visible').hide();    //Hide all visible 'toggle' div's
    $(this).show();                 //Show the clicked div
});
  

Ответ №5:

Вы можете использовать :not() селектор.

 show_A = function () {$('.a').show(); $('div:not(.a)').hide();}
  

Ответ №6:

Возможно, я не понимаю вопроса, но похоже, что он хочет чего-то в этом роде:

 $('div').each().click( function(){
    var cls = $(this).attr('class');
    if( $("div[class*='" cls "']").is(':visible')){ $("div[class*='" cls "']").hide();}//
    else{ $("div[class*='" cls "']").show(); }
}
);
  

// Отказ от ответственности — Я не проверял, работает ли объединенный селектор, но адаптировал его из авторитетного блога.