I’m using a simple jQuery script for tabs:
The JS:
$(document).ready(function() {
$(".tab-content").hide();
$("ul.tabs li:first").addClass("active").show();
$(".tab-content:first").show();
$("ul.tabs li").click(function() {
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
$(".tab-content").hide();
var activeTab = $(this).find("a").attr("href");
$(activeTab).show();
return false;
});
});
The HTML (for the index.html):
<div id="tabs">
<ul class="tabs">
<li><a href="#tabs-voters">Top Voters</a></li>
<li><a href="#tabs-commenters">Top Commenters</a></li>
</ul>
<div id="tabs-voters" class="tab-content">
<p id="h1-01">Tab content</p>
<p>Some content</p>
</div>
<div id="tabs-commenters" class="tab-content">
<h2 id="h-02">Tab content</h2>
<p>Some content</p>
<h2 id="h-03">Tab content</h2>
<p>Some content</p>
</div>
</div>
What I need to do is to create a working link to index.html#h-02, index.html#h-03 etc., but these simple links don’t work because the tab is hidden by default. Is it possible to modify the JS, so I can link to a bookmark in tabs that are hidden when opening index.html? Can someone point me in the right direction?
Thanks a lot! 🙂
In your document ready handler, you can examine the value of the fragment and use JavaScript to show the corresponding tab.
Edit as requested:
Edit 2:
If you want to be able to specify an ID of a tab content element (like
h-02in the page you linked) then you have to work backwards to get the ID of the corresponding tab to activate it. Like this:Using
$.closest()means that the hash can specify the ID of the.tab-contentitself (such astabs-commentersin your example), or a child thereof.I’ve made some other cleanup suggestions as well above. No need to keep re-selecting those DOM elements!