Как я могу переключать содержимое вкладок в Bootstrap 5?

Можно ли переключать содержимое вкладок в Bootstrap 5? Я имею в виду, что нажатие на уже открытую/активную вкладку деактивирует/закрывает содержимое, чтобы ни одна вкладка не была активной?

Документация Bootstrap

<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet"/>
<ul class = "nav nav-tabs" id = "myTab" role = "tablist">
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "home-tab" data-bs-toggle = "tab" data-bs-target = "#home-tab-pane" type = "button" role = "tab" aria-controls = "home-tab-pane" aria-selected = "true">Home</button>
  </li>
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "profile-tab" data-bs-toggle = "tab" data-bs-target = "#profile-tab-pane" type = "button" role = "tab" aria-controls = "profile-tab-pane" aria-selected = "false">Profile</button>
  </li>
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "contact-tab" data-bs-toggle = "tab" data-bs-target = "#contact-tab-pane" type = "button" role = "tab" aria-controls = "contact-tab-pane" aria-selected = "false">Contact</button>
  </li>
</ul>
<div class = "tab-content" id = "myTabContent">
  <div class = "tab-pane fade" id = "home-tab-pane" role = "tabpanel" aria-labelledby = "home-tab" tabindex = "0">Home: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Sausage andouille pork belly flank tongue burgdoggen pork
    capicola pork chop hamburger short loin rump pork loin shank. Cow boudin jowl, short ribs chicken chislic swine. Pancetta capicola turducken andouille. Porchetta corned beef jowl, buffalo brisket shoulder capicola tail pig shank swine hamburger frankfurter.
    Bresaola alcatra chuck fatback turkey filet mignon ham hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare
    ribs porchetta pig burgdoggen pork loin tongue tri-tip pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen
    t-bone ball tip beef. Bresaola picanha brisket porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
  <div class = "tab-pane fade" id = "profile-tab-pane" role = "tabpanel" aria-labelledby = "profile-tab" tabindex = "0">Profile: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Bresaola alcatra chuck fatback turkey filet mignon ham
    hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare ribs porchetta pig burgdoggen pork loin tongue tri-tip
    pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen t-bone ball tip beef. Bresaola picanha brisket
    porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
  <div class = "tab-pane fade" id = "contact-tab-pane" role = "tabpanel" aria-labelledby = "contact-tab" tabindex = "0">Contact: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Sausage andouille pork belly flank tongue burgdoggen pork
    capicola pork chop hamburger short loin rump pork loin shank. Cow boudin jowl, short ribs chicken chislic swine. Pancetta capicola turducken andouille. Porchetta corned beef jowl, buffalo brisket shoulder capicola tail pig shank swine hamburger frankfurter.
    Bresaola alcatra chuck fatback turkey filet mignon ham hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare
    ribs porchetta pig burgdoggen pork loin tongue tri-tip pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen
    t-bone ball tip beef. Bresaola picanha brisket porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
</div>

Jsfiddle

Поведение ключевого слова "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) для оценки ваших знаний,...
3
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

  1. На вкладках установите атрибуты data-bs-toggle на collapse.
  2. В содержании замените классы tab-pane на collapse.
  3. В контенте добавьте атрибуты data-bs-parent = "#myTabContent", чтобы другой контент закрывался при открытии другого.

<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet"/>
<ul class = "nav nav-tabs" id = "myTab" role = "tablist">
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "home-tab" data-bs-toggle = "collapse" data-bs-target = "#home-tab-pane" type = "button" role = "tab" aria-controls = "home-tab-pane" aria-selected = "true">Home</button>
  </li>
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "profile-tab" data-bs-toggle = "collapse" data-bs-target = "#profile-tab-pane" type = "button" role = "tab" aria-controls = "profile-tab-pane" aria-selected = "false">Profile</button>
  </li>
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "contact-tab" data-bs-toggle = "collapse" data-bs-target = "#contact-tab-pane" type = "button" role = "tab" aria-controls = "contact-tab-pane" aria-selected = "false">Contact</button>
  </li>
</ul>
<div class = "tab-content" id = "myTabContent">
  <div class = "collapse" id = "home-tab-pane" data-bs-parent = "#myTabContent" role = "tabpanel" aria-labelledby = "home-tab" tabindex = "0">Home: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Sausage andouille pork belly flank tongue burgdoggen pork
    capicola pork chop hamburger short loin rump pork loin shank. Cow boudin jowl, short ribs chicken chislic swine. Pancetta capicola turducken andouille. Porchetta corned beef jowl, buffalo brisket shoulder capicola tail pig shank swine hamburger frankfurter.
    Bresaola alcatra chuck fatback turkey filet mignon ham hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare
    ribs porchetta pig burgdoggen pork loin tongue tri-tip pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen
    t-bone ball tip beef. Bresaola picanha brisket porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
  <div class = "collapse" id = "profile-tab-pane" data-bs-parent = "#myTabContent" role = "tabpanel" aria-labelledby = "profile-tab" tabindex = "0">Profile: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Bresaola alcatra chuck fatback turkey filet mignon ham
    hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare ribs porchetta pig burgdoggen pork loin tongue tri-tip
    pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen t-bone ball tip beef. Bresaola picanha brisket
    porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
  <div class = "collapse" id = "contact-tab-pane" data-bs-parent = "#myTabContent" role = "tabpanel" aria-labelledby = "contact-tab" tabindex = "0">Contact: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Sausage andouille pork belly flank tongue burgdoggen pork
    capicola pork chop hamburger short loin rump pork loin shank. Cow boudin jowl, short ribs chicken chislic swine. Pancetta capicola turducken andouille. Porchetta corned beef jowl, buffalo brisket shoulder capicola tail pig shank swine hamburger frankfurter.
    Bresaola alcatra chuck fatback turkey filet mignon ham hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare
    ribs porchetta pig burgdoggen pork loin tongue tri-tip pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen
    t-bone ball tip beef. Bresaola picanha brisket porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
</div>
Ответ принят как подходящий

В качестве быстрого и грязного решения я бы добавил прослушиватель кликов, чтобы показывать/скрывать вкладку (удалять класс active show со вкладки) при нажатии той же ссылки, а также переключать активный класс кнопки и кнопку размытия, чтобы удалить контур фокуса:

  let current = '';

  function toggleContent(evt) {

    const btn = evt.target;

    if (btn.getAttribute('id') === current) {
      const tab = document.querySelector(btn.getAttribute('data-bs-target'))
      
      tab.classList.toggle('show');
      
      if (!tab.classList.contains('show')) {
        btn.blur();
        btn.classList.toggle('active');
        tab.classList.toggle('active');
      }
    }
    current = btn.getAttribute('id');
  }

  document.querySelectorAll('#myTab button').forEach(el => el.addEventListener('click', toggleContent));

демо:

<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet" />
<ul class = "nav nav-tabs" id = "myTab" role = "tablist">
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "home-tab" data-bs-toggle = "tab" data-bs-target = "#home-tab-pane" type = "button" role = "tab" aria-controls = "home-tab-pane" aria-selected = "true">Home</button>
  </li>
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "profile-tab" data-bs-toggle = "tab" data-bs-target = "#profile-tab-pane" type = "button" role = "tab" aria-controls = "profile-tab-pane" aria-selected = "false">Profile</button>
  </li>
  <li class = "nav-item" role = "presentation">
    <button class = "nav-link" id = "contact-tab" data-bs-toggle = "tab" data-bs-target = "#contact-tab-pane" type = "button" role = "tab" aria-controls = "contact-tab-pane" aria-selected = "false">Contact</button>
  </li>
</ul>
<div class = "tab-content" id = "myTabContent">
  <div class = "tab-pane fade" id = "home-tab-pane" role = "tabpanel" aria-labelledby = "home-tab" tabindex = "0">Home: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Sausage andouille pork belly flank tongue burgdoggen pork
    capicola pork chop hamburger short loin rump pork loin shank. Cow boudin jowl, short ribs chicken chislic swine. Pancetta capicola turducken andouille. Porchetta corned beef jowl, buffalo brisket shoulder capicola tail pig shank swine hamburger frankfurter.
    Bresaola alcatra chuck fatback turkey filet mignon ham hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare
    ribs porchetta pig burgdoggen pork loin tongue tri-tip pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen
    t-bone ball tip beef. Bresaola picanha brisket porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
  <div class = "tab-pane fade" id = "profile-tab-pane" role = "tabpanel" aria-labelledby = "profile-tab" tabindex = "0">Profile: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Bresaola alcatra chuck fatback turkey filet mignon ham
    hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare ribs porchetta pig burgdoggen pork loin tongue tri-tip
    pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen t-bone ball tip beef. Bresaola picanha brisket
    porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
  <div class = "tab-pane fade" id = "contact-tab-pane" role = "tabpanel" aria-labelledby = "contact-tab" tabindex = "0">Contact: Bacon ipsum dolor amet hamburger brisket chicken drumstick jerky flank bresaola strip steak pork belly shank. Tongue tenderloin porchetta, swine drumstick spare ribs bresaola jowl meatloaf. Drumstick doner shoulder, beef ribs venison andouille
    ball tip flank. Kielbasa beef frankfurter, venison swine ball tip picanha doner fatback corned beef ham. Tenderloin leberkas short loin, ham drumstick doner alcatra chislic burgdoggen chicken. Sausage andouille pork belly flank tongue burgdoggen pork
    capicola pork chop hamburger short loin rump pork loin shank. Cow boudin jowl, short ribs chicken chislic swine. Pancetta capicola turducken andouille. Porchetta corned beef jowl, buffalo brisket shoulder capicola tail pig shank swine hamburger frankfurter.
    Bresaola alcatra chuck fatback turkey filet mignon ham hock flank ground round spare ribs ball tip shank t-bone. Swine pork loin sirloin fatback cow pork chop short loin chicken salami. Chicken chuck shankle flank, turducken short ribs buffalo. Spare
    ribs porchetta pig burgdoggen pork loin tongue tri-tip pork chop. Turducken meatball frankfurter spare ribs tongue meatloaf, kevin bresaola pork chop short loin fatback leberkas beef ribs brisket. Kevin chuck pork pig, prosciutto picanha shankle burgdoggen
    t-bone ball tip beef. Bresaola picanha brisket porchetta tri-tip chislic doner tongue short loin filet mignon flank leberkas andouille landjaeger.</div>
</div>


<script>
  let current = '';

  function toggleContent(evt) {

    const btn = evt.target;

    if (btn.getAttribute('id') === current) {
      const tab = document.querySelector(btn.getAttribute('data-bs-target'))
      
      tab.classList.toggle('show');
      
      if (!tab.classList.contains('show')) {
        btn.blur();
        btn.classList.toggle('active');
        tab.classList.toggle('active');
      }
    }
    current = btn.getAttribute('id');
  }

  document.querySelectorAll('#myTab button').forEach(el => el.addEventListener('click', toggleContent));
</script>

Большое спасибо.

Meek 22.08.2024 14:57

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