jQuery 选项卡:将活动选项卡 ID 附加到列表中的所有 href 属性
jQuery tabs: append active tab ID to all href attributes in a list
我有一个链接列表:
<ul class="links">
<li><a href="link-1.html">Page 1</a></li>
<li><a href="link-2.html">Page 2</a></li>
<li><a href="link-3.html">Page 3</a></li>
</ul>
下面是一些 jQuery 标签:
<div id="tabs">
<ul>
<li><a href="#tabs-1">First</a></li>
<li><a href="#tabs-2">Second</a></li>
<li><a href="#tabs-3">Third</a></li>
</ul>
<div id="tabs-1">First tab content</div>
<div id="tabs-2">Second tab content</div>
<div id="tabs-3">Third tab content</div>
</div>
单击选项卡时,我希望将活动选项卡的 ID 附加到链接列表中的所有 href 属性。例如,如果第二个选项卡处于活动状态,则链接列表将为:
<ul class="links">
<li><a href="link-1.html#tabs-2">Page 1</a></li>
<li><a href="link-2.html#tabs-2">Page 2</a></li>
<li><a href="link-3.html#tabs-2">Page 3</a></li>
</ul>
然后,当单击任何附加链接时,活动选项卡也应在新页面上打开。因此在上面的示例中,标签#2 应该在加载新页面时激活。
我尝试修改以下内容,目前的形式当然只是更改所有链接的文本,而不是附加 href 属性。
function getSelectedTabId(){
return $("#tabs .ui-tabs-panel:visible").attr("id");
}
$(function() {
$( "#tabs" ).tabs();
//update the display of the selected id
$("#tabs").click(function(e){
$("ul.links a").text(getSelectedTabId());
});
//initalize the selected id display
$("#tabs").click();
});
提前感谢您的指导!
对于 jQueryUI 选项卡,点击事件的使用是错误的。
要使用的事件是创建和激活。
在下面的代码段中。
如果您需要在文档加载时选择标签 x,您需要计算它以将活动标签设置为 0:
$(function () {
var hashTab = window.location.hash;
var activeTab = 0;
if (hashTab.length > 0) {
activeTab = $('a[href^="#tabs-"]').index($('a[href="' + hashTab + '"]'));
}
$( "#tabs" ).tabs({
active: activeTab,
create: function(event, ui) {
$("ul.links a").attr('href', function(index, attr) {
this.href = attr.substr(0, attr.indexOf('#') == -1 ? attr.length : attr.indexOf('#')) + ui.tab.children().attr('href');
});
// the next line is only for testing purposes
$("ul.links a").text(function(index, text) {
this.text = text.substr(0, text.indexOf('#') == -1 ? text.length : text.indexOf('#')) + ui.tab.children().attr('href');
});
},
activate: function(event, ui) {
$("ul.links a").attr('href', function(index, attr) {
this.href = attr.substr(0, attr.indexOf('#') == -1 ? attr.length : attr.indexOf('#')) + ui.newTab.children().attr('href');
});
// the next line is only for testing purposes
$("ul.links a").text(function(index, text) {
this.text = text.substr(0, text.indexOf('#') == -1 ? text.length : text.indexOf('#')) + ui.newTab.children().attr('href');
});
}
});
});
<link href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.min.css" rel="stylesheet"/>
<script src="http://code.jquery.com/jquery-1.11.3.js"></script>
<script src="http://code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
<ul class="links">
<li><a href="link-1.html">Page 1</a></li>
<li><a href="link-2.html">Page 2</a></li>
<li><a href="link-3.html">Page 3</a></li>
</ul>
<div id="tabs">
<ul>
<li><a href="#tabs-1">First</a></li>
<li><a href="#tabs-2">Second</a></li>
<li><a href="#tabs-3">Third</a></li>
</ul>
<div id="tabs-1">First tab content</div>
<div id="tabs-2">Second tab content</div>
<div id="tabs-3">Third tab content</div>
</div>
答案如下:
https://forum.jquery.com/topic/maintain-active-tab-through-multiple-page-loads
https://jsfiddle.net/jakecigar/1qu0zgrp
$(function () {
var hashTab = window.location.hash;
var activeTab = 0;
if (hashTab.length > 0) {
activeTab = $('a[href^="#tabs-"]').index($('a[href="' + hashTab + '"]'));
}
console.log(activeTab)
hashLinks()
$("#tabs").tabs({
active: activeTab,
activate: function(event, ui) {
location.hash = ui.newTab.find("[href]").prop("hash")
console.log(location.hash)
hashLinks()
}
})
function hashLinks() {
$(".links a").prop("hash", location.hash)
}
$("button").click(function() {
location.reload(true)
})
});
我有一个链接列表:
<ul class="links">
<li><a href="link-1.html">Page 1</a></li>
<li><a href="link-2.html">Page 2</a></li>
<li><a href="link-3.html">Page 3</a></li>
</ul>
下面是一些 jQuery 标签:
<div id="tabs">
<ul>
<li><a href="#tabs-1">First</a></li>
<li><a href="#tabs-2">Second</a></li>
<li><a href="#tabs-3">Third</a></li>
</ul>
<div id="tabs-1">First tab content</div>
<div id="tabs-2">Second tab content</div>
<div id="tabs-3">Third tab content</div>
</div>
单击选项卡时,我希望将活动选项卡的 ID 附加到链接列表中的所有 href 属性。例如,如果第二个选项卡处于活动状态,则链接列表将为:
<ul class="links">
<li><a href="link-1.html#tabs-2">Page 1</a></li>
<li><a href="link-2.html#tabs-2">Page 2</a></li>
<li><a href="link-3.html#tabs-2">Page 3</a></li>
</ul>
然后,当单击任何附加链接时,活动选项卡也应在新页面上打开。因此在上面的示例中,标签#2 应该在加载新页面时激活。
我尝试修改以下内容,目前的形式当然只是更改所有链接的文本,而不是附加 href 属性。
function getSelectedTabId(){
return $("#tabs .ui-tabs-panel:visible").attr("id");
}
$(function() {
$( "#tabs" ).tabs();
//update the display of the selected id
$("#tabs").click(function(e){
$("ul.links a").text(getSelectedTabId());
});
//initalize the selected id display
$("#tabs").click();
});
提前感谢您的指导!
对于 jQueryUI 选项卡,点击事件的使用是错误的。
要使用的事件是创建和激活。
在下面的代码段中。
如果您需要在文档加载时选择标签 x,您需要计算它以将活动标签设置为 0:
$(function () {
var hashTab = window.location.hash;
var activeTab = 0;
if (hashTab.length > 0) {
activeTab = $('a[href^="#tabs-"]').index($('a[href="' + hashTab + '"]'));
}
$( "#tabs" ).tabs({
active: activeTab,
create: function(event, ui) {
$("ul.links a").attr('href', function(index, attr) {
this.href = attr.substr(0, attr.indexOf('#') == -1 ? attr.length : attr.indexOf('#')) + ui.tab.children().attr('href');
});
// the next line is only for testing purposes
$("ul.links a").text(function(index, text) {
this.text = text.substr(0, text.indexOf('#') == -1 ? text.length : text.indexOf('#')) + ui.tab.children().attr('href');
});
},
activate: function(event, ui) {
$("ul.links a").attr('href', function(index, attr) {
this.href = attr.substr(0, attr.indexOf('#') == -1 ? attr.length : attr.indexOf('#')) + ui.newTab.children().attr('href');
});
// the next line is only for testing purposes
$("ul.links a").text(function(index, text) {
this.text = text.substr(0, text.indexOf('#') == -1 ? text.length : text.indexOf('#')) + ui.newTab.children().attr('href');
});
}
});
});
<link href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.min.css" rel="stylesheet"/>
<script src="http://code.jquery.com/jquery-1.11.3.js"></script>
<script src="http://code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
<ul class="links">
<li><a href="link-1.html">Page 1</a></li>
<li><a href="link-2.html">Page 2</a></li>
<li><a href="link-3.html">Page 3</a></li>
</ul>
<div id="tabs">
<ul>
<li><a href="#tabs-1">First</a></li>
<li><a href="#tabs-2">Second</a></li>
<li><a href="#tabs-3">Third</a></li>
</ul>
<div id="tabs-1">First tab content</div>
<div id="tabs-2">Second tab content</div>
<div id="tabs-3">Third tab content</div>
</div>
答案如下:
https://forum.jquery.com/topic/maintain-active-tab-through-multiple-page-loads
https://jsfiddle.net/jakecigar/1qu0zgrp
$(function () {
var hashTab = window.location.hash;
var activeTab = 0;
if (hashTab.length > 0) {
activeTab = $('a[href^="#tabs-"]').index($('a[href="' + hashTab + '"]'));
}
console.log(activeTab)
hashLinks()
$("#tabs").tabs({
active: activeTab,
activate: function(event, ui) {
location.hash = ui.newTab.find("[href]").prop("hash")
console.log(location.hash)
hashLinks()
}
})
function hashLinks() {
$(".links a").prop("hash", location.hash)
}
$("button").click(function() {
location.reload(true)
})
});