我正在为标签使用简单的jQuery脚本:
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;
});
});
HTML(对于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>
我需要做的是创建 index.html#h-02 , index.html#h-03 等的工作链接,但这些简单链接不起作用,因为默认情况下隐藏选项卡。是否可以修改JS,因此我可以链接到打开index.html时隐藏的选项卡中的书签?有人能指出我正确的方向吗?
非常感谢! :)
答案 0 :(得分:9)
在文档就绪处理程序中,您可以检查片段的值并使用JavaScript显示相应的选项卡。
$(document).ready(function () {
...
var tabId = window.location.hash; // will look something like "#h-02"
$(tabId).click(); // after you've bound your click listener
});
根据要求修改:
$(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;
});
$(window.location.hash).click(); // super-simple, no? :)
});
编辑2:
如果您希望能够指定标签内容元素的ID(如您链接的页面中的h-02
),则必须向后工作以获取相应标签的ID以激活它。像这样:
$(document).ready(function() {
var $tabContent = $(".tab-content"),
$tabs = $("ul.tabs li"),
tabId;
$tabContent.hide();
$("ul.tabs li:first").addClass("active").show();
$tabContent.first().show();
$tabs.click(function() {
var $this = $(this);
$tabs.removeClass("active");
$this.addClass("active");
$tabContent.hide();
var activeTab = $this.find("a").attr("href");
$(activeTab).show();
return false;
});
// Grab the ID of the .tab-content that the hash is referring to
tabId = $(window.location.hash).closest('.tab-content').attr('id');
// Find the anchor element to "click", and click it
$tabs.find('a[href=#' + tabId + ']').click();
});
使用$.closest()
表示哈希可以指定.tab-content
本身的ID(例如示例中的tabs-commenters
)或其子代。
我上面已经提出了一些其他的清理建议。无需继续重新选择那些DOM元素!
答案 1 :(得分:1)
//Default Action
jQuery(".tab_content").hide(); //Hide all content
jQuery("ul.tabs li:first").addClass("active").show(); //Activate first tab
jQuery(".tab_content:first").show(); //Show first tab content
//On Click Event
jQuery("ul.tabs li").click(function() {
jQuery("ul.tabs li").removeClass("active"); //Remove any "active" class
jQuery(this).addClass("active"); //Add "active" class to selected tab
jQuery(".tab_content").hide(); //Hide all tab content
var activeTab = jQuery(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content
jQuery(activeTab).fadeIn(); //Fade in the active content
return false;
});
答案 2 :(得分:0)
好吧,您可以将您的网址设为http://site.com/index.html?voters
,然后在页面中检查window.location.search
(搜索包含问号的位)。如果是"?voters"
,则运行代码以选择选项卡。如果是"?commenters"
,则运行代码以选择该选项卡。等等。
答案 3 :(得分:0)
您可以通过GET将参数传递到网页。
即。 www.yourpage.com?tab=tab1
然后例如(使用php)
<?php
$tab = $_REQUEST['tab'];
?>
然后在您的JS代码中,您可以执行以下操作:
var default_id = <?php echo $tab; ?>
$("#"+default_id).addClass("active").show();
虽然你应该检查以确保default_id有效,如果没有加载工作默认值(就像你已经做的那样)
编辑我刚刚注意到这个问题是想要使用格式化的网址,例如www.example.com#h-02,你最好只坚持使用JS
答案 4 :(得分:0)
我会尝试稍微修改你的代码。我就是这样做的:
这样你就能完全达到你想要的效果。
这是我使用的代码:
<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="wrap">
<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 cdsfdfontent</h2>
<p>Some contesdfdsfsdfant</p>
</div>
</div>
</div>
这是Javascript:
$(document).ready(function() {
$(".tab-content").hide();
$("ul.tabs li a:first").addClass("active").show();
$("#wrap > div").hide().filter(":first").show();
$("ul.tabs li a").click(function() {
$("ul.tabs li > a").removeClass("active");
$(this).addClass("active");
$("#wrap > div").hide();
var activeTab = $(this).attr("href");
$(activeTab).show();
return false;
});
});
让我知道它是如何运作的!
答案 5 :(得分:0)
这是我根据马特的回答让我的工作。我发布这个来帮助别人。
<script>
$(document).ready(function(){
$.tabs('#tabs a');
$('#tabs a[tab=\'' + window.location.hash + '\']').trigger('click');
});
</script>
<div id="tabs" class="htabs">
<a tab="#tab_general">General</a>
<a tab="#tab_other">Other</a>
</div>
<div id="tab_general">
Tab 1 here
</div>
<div id="tab_other">
Tab 2 here
</div>
答案 6 :(得分:0)
我喜欢Dan Powers的答案,我目前正在使用它的版本。但是,我一开始认为它不起作用所以我做了alert(window.location.hash)
并发现它包括#
。 Dan的回答是有效的,因为他在他的标签ID中使用#
,例如tab="#tab_general"
。所以,要注意这一点。
如果您想要在没有#的情况下读取您的哈希名称,例如tab="tab_general"
,替换:
$('#tabs a[tab=\'' + window.location.hash + '\']').trigger('click');
与
$('#tabs a[tab=\'' + window.location.hash.substring(1) + '\']').trigger('click');
您当然也可以将tab
更改为id
或其他内容。
我还没弄清楚如何链接到嵌套标签,例如一个选项卡包含带有子选项卡的页面。