JQuery UIのタブを使用しています: http://jqueryui.com/demos/tabs/
ユーザーが別のタブをクリックしたときにブラウザの現在のURLを更新する方法:例:url.html#tab-4と同時に、ブラウザの現在の履歴をプッシュします。
ありがとうございました!
これで必要なものが得られるはずです(バージョン1.9以降では jQuery UI 1.8 を使用し、 activate event を使用します。コード例については、他の回答を参照してください)。 jQueryUIデモでサンプルHTMLを使用しました。
$( "#tabs" ).tabs({
select: function(event, ui) {
window.location.hash = ui.tab.hash;
}
});
jQuery UI 1.10以降では、show
は廃止されてactivate
になりました。また、id
は無効なjQueryではなくなりました。代わりに.attr('id')
を使用してください。最後に、on('tabsactivate')
の代わりにbind()
を使用します。
$(function() {
$("#tabs").tabs({
activate: function(event, ui) {
window.location.hash = ui.newPanel.attr('id');
}
});
});
作成後の方法:
$("#myTabs").on( "tabsactivate", function(event, ui) {
window.location.hash = ui.panel.id;
});
デモ: http://jsfiddle.net/RVHzV/
観察可能な結果: http://jsfiddle.net/RVHzV/show/light/
以前のバージョンのJQuery
タブ呼び出しにハンドラーを追加して、タブIDでロケーションハッシュを更新します。
$("#myTabs").tabs({
// options ...
show: function(event, ui) {
window.location.hash = ui.panel.id;
}
});
UIタブの作成後にこれを追加することもできます。
$("#myTabs").bind( "tabsshow", function(event, ui) {
window.location.hash = ui.panel.id;
});
コードデモ: http://jsfiddle.net/jtbowden/ZsUBz/1/
観察可能な結果: http://fiddle.jshell.net/jtbowden/ZsUBz/1/show/light/
まず、タブの変更時にハッシュを更新する必要があります(これは最新のjQueryUI用です)。
$('#tabs').tabs({
beforeActivate: function (event, ui) {
window.location.hash = ui.newPanel.selector;
}
});
次に、ハッシュ変更のアクティブなタブを更新する必要があります(つまり、ブラウザの履歴、戻る/進むボタン、ユーザーがハッシュを手動で入力できるようにする)。
$(window).on('hashchange', function () {
if (!location.hash) {
$('#tabs').tabs('option', 'active', 0);
return;
}
$('#tabs > ul > li > a').each(function (index, a) {
if ($(a).attr('href') == location.hash) {
$('#tabs').tabs('option', 'active', index);
}
});
});
$( "#tabs" ).tabs({
activate: function(event, ui) {
//Key => random string
//url => URL you want to set
window.history.pushState({key:'url'},'','url');
}
});
最初のタブをURLに表示するには、「アクティブ化」ではなく「作成」を使用する必要がありました。
$('#tabs').tabs({
create: function(event, ui) {
window.location.hash = ui.panel.attr('id');
}
});
このソリューションはURLを変更するために機能しているようですが、URLに戻っても、タブが切り替わりません。そのURLがヒットしたときにタブを切り替えるように特別なことをする必要がありますか?
JQueryレスポンシブタブ内でこのメソッドを使用して、アクティブなタブでURLをハッシュしました。
$(function() {
$('#tabs, #subtabs').responsiveTabs({
activate: function(event, ui) {
window.location.hash = $("ul li.r-tabs-state-active a").attr("href");
},
startCollapsed: 'accordion'
});
});
上記のJeffBの作業を基に構築しています...これはjQuery1.11.1で機能します。
$("#tabs").tabs(); //initialize tabs
$(function() {
$("#tabs").tabs({
activate: function(event, ui) {
var scrollTop = $(window).scrollTop(); // save current scroll position
window.location.hash = ui.newPanel.attr('id'); // add hash to url
$(window).scrollTop(scrollTop); // keep scroll at current position
}
});
});
ここでの他の答えの組み合わせは私のために働いた。
$( "#tabs" ).tabs({
create: function(event, ui) {
window.location.hash = ui.panel.attr('id');
},
activate: function(event, ui) {
window.location.hash = ui.newPanel.attr('id');
}
});