Посмотрите на лучшее в HTML / JS, лучшего способа нет. Конечно, есть и худшие пути. Но лучшее или лучшее действительно зависит от того, чего мы пытаемся достичь.
Согласно моему опыту веб-разработчика и рассмотрению различных плагинов jQuery, есть несколько принципов, которые обычно имеют разработчики. Что-то вроде:
HTML должен быть структурно определен настолько, насколько это возможно, так что, даже не читая JS позади, разработчик должен узнать, что эта функциональность или UX пытается делать или будет делать.
То, как я это сделаю, будет следующим: Опять же, это не лучший способ. Но я выделю преимущества этого подхода:
Первая разметка
<ul class="tabs" data-tabable-target="#my-tabable-data">
<li class="tab active"><a href="#shopping-tab">Shopping</a></li>
<li class="tab"><a href="#books-tab">Books</a></li>
<li class="tab"><a href="#movies-tab">Movies</a></li>
</ul>
<div class="panels" data-tabable="" id="my-tabable-data">
<div id="shopping-tab">1</div>
<div id="books-tab">2</div>
<div id="movies-tab">3</div>
</div>
Причина, по которой я использовал атрибут data-tabable
, заключается в том, что я предпочитаю классы для стиля. Вы также можете добавить имена классов tabable
, например <div class="panel tabable">
, а затем добавить свой код jQuery для достижения своей функциональности, а также для определения стиля с помощью классов.
Затем напишите мой jQuery как:
$('[data-tabable-target]').each(function() {
target = $(this.data('tabable-target'));
target.find('div').addClass('hidden');
this.children('li').click(function() {
tabToBeActivated = $(this.children('a').get(0).href);
tabToBeActivated.removeClass('hidden');
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Это, по сути, сделает мой код многократно используемым, это позволит мне добавить отдельную вкладку на той же странице. Нечто подобное.
<ul class="tabs" data-tabable-target="#my-other-tabable-data">
<li class="tab active"><a href="#shopping-tab">Shopping</a></li>
<li class="tab"><a href="#books-tab">Books</a></li>
<li class="tab"><a href="#movies-tab">Movies</a></li>
</ul>
<div class="panels" data-tabable="" id="my-other-tabable-data">
<div id="hobbies-tab">1</div>
<div id="travels-tab">2</div>
<div id="random-tab">3</div>
</div>
Действительно, все сводится к тому, как вы это делаете. Просто попробуйте решить проблему под рукой. Если что-то, я не собираюсь использовать один раз на странице, а просто покончить с этим. Я, наверное, напишу то, что вы написали. Если он находится в разработке, и необходимость немедлена, я бы использовал плагин jQuery.
Вы должны проверить https://getbootstrap.com/docs/3.3/javascript/#tabs