• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:cookie を利用して 別ページへ移動前に見ていたタブに戻す方法)

cookieを利用して別ページへ移動前に見ていたタブに戻す方法

このQ&Aのポイント
  • JavaScriptを使用して、cookieを利用してタブの状態を保存し、別のページに移動した後に元のタブを復元する方法について説明します。
  • 以下のコードでは、window.onloadイベントハンドラに関数が登録されています。この関数内で、createTab()、showCategory('menu1')、setTabClick('menu1Nav','menu1')などの関数を実行しています。
  • createTab()関数では、ul要素を生成し、createListItem()関数を使用して各タブのリンクを作成しています。setTabClick()関数では、リンクがクリックされた時に該当するタブを表示するように設定しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

====== cookie.js ================================================= var COOKIE = {  data : {},  expires : null,  path : null,  domain : null,    init : function( ) {   this.parse( );   window./*@if(1) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/ 'unload', this.regist, false );  },    regist : function( ) {   var cookie = [];   for( name in COOKIE.data ) {    COOKIE.data.hasOwnProperty( name ) && cookie.push( encodeURIComponent( name ) + '=' + encodeURIComponent( COOKIE.data[ name ] ) );   }      COOKIE.expires && cookie.push( 'expires=' + COOKIE.expires.toUTCString( ) );   COOKIE.path && cookie.push( 'path=' + encodeURIComponent( COOKIE.path ) );   COOKIE.domain && cookie.push( 'domain=' + encodeURIComponent( COOKIE.domain ) );      document.cookie = cookie.join( '; ' );  },    set : function( name, value ) {   this.data[ name ] = value;  },    get : function( name ) {   return this.data.hasOwnProperty( name ) ? this.data[ name ] : null;  },    parse : function( ) {   var cookie = document.cookie.split( /;\s*/ );   var parts, i;      for( i=0; i<cookie.length; i++ ) {    parts = cookie[ i ].split( '=' );        switch( parts[ 0 ] ) {     case 'expires' : this.expires = parts[ 1 ]; break;     case 'path' : this.path = parts[ 1 ]; break;     case 'domain' : this.domain = parts[ 1 ]; break;     default : this.data[ parts[ 0 ] ] = parts[ 1 ];    }   }  } }; COOKIE.init( );

dnsn
質問者

お礼

yuu_x 様、スクリプトを本当にありがとうございます。 心より感謝申し上げます。 少し別作業等落ち着いたら、ぜひ試させて頂きます。 メソッドのコールで分からない点がありましたら、 また書き込みをさせて頂きます。 そのような際は、もしそのときお時間可能でしたら、宜しくお願い申し上げます。 本当に、2度の書き込みに渡り、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

すみません、使い方かいてませんでしたね。 関数名、プロパティ名そのままですが、 // 前準備として、有効期限をセットしてやります。Date 型をそのままセットできます。 var date = new Date; date.setDate( date.getDate() + 1 ); // 有効期限 1 日なら COOKIE.expires = date; // そのとき限りで消えてしまってもかまわないようでしたら、セットしなくても大丈夫です。 # この実装いまいちかも。。。 // 保存したいときは、 COOKIE.set( 'shownID', 'menu1' ); など。 // 取り出したいときは COOKIE.get( 'shownID' ); 存在しないときは null が返ります。 データをまとめて消したいときは COOKIE.data = {}; としてください。 # destroy 関数があってもよかったかもしれません。 // path, domain は必要に応じてセットしてください。わからなければ放置で大丈夫です。

dnsn
質問者

お礼

yuu_x 様、お忙しいところ温かいお心遣い、本当にありがとうございます。 ぜひ試させて頂きます。 重ねて、感謝申し上げます。

dnsn
質問者

補足

yuu_x 様、先日は誠にありがとうございました。 まだバタバタして記述を試せていないのですが、goo より【2週間経過の close催促】がありましたので、一旦本スレッドを閉じさせて頂きます(「またお尋ねすることがあるかもしれない」とも思っておりましたが)。 必要あれば、また別スレッドを立てさせて頂きます。 今回は、本当に誠にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

unloadイベントでそのときのタブの番号をクッキーに保存。 onload時にクッキーのタブ番号を表示(なければデフォルト)。 で、よいのでは? 単純にクッキーへの保存、読出しができればよいだけでしょうから、調べれば解説サイトがいろいろとあると思いますが? (文字数の都合を考えれば、ここでの回答よりも詳細な説明やサンプルも沢山あるはず)  http://www.google.com/search?q=javascript+cookie

dnsn
質問者

補足

fujillin 様、コメントありがとうございます。 ご指摘のイベント時に記述を書くこと&ご意見全くごもっともです。本来検索して時間をかけ調べるべきところ、現在別の作業の納期等に追われ半死に状況です。 大変ムシの良い書き込みであることは重々承知しております。 もしお教え頂ける方がいらっしゃれば、 ・目的達成に近いサンプルの解説ページURL or ・説明文抜きで勿論結構ですので、「関数定義」と「そのコール方法」の記述法 を教えて頂ければ、当方まさに「天の助け」の状況です。 御恩は忘れません。 「ふざけんじゃねえ」とご気分を害する場合は、どうかお許し&お流しください。 コメントありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 他ページから直接タブにアクセスするには、以下をどうすればなりますか?

    他ページから直接タブにアクセスするには、以下をどうすればなりますか? タブのidには、tbc_1~5までを設定しています。 function $(id) {return document.getElementById(id);} function tab(n) { var li=$("tab").getElementsByTagName("li"); for(var i=1;i<=li.length;i++){ $("tb_"+i).className=""; $("tbc_"+i).style.display="none"; } $("tb_"+n).className="on"; $("tbc_"+n).style.display="block"; }

  • カテゴリページ内 複数タブ

    wordpressでサイト作っています idの番号を変えることで1ページ内に#numの連番で複数タブを置ける様にはしたのですが、 while文のなかで番号に連番を振るやり方がわかりません。 初心者ですいませんが、よろしくお願いします <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/ … <script type="text/javascript"> $.hoge = function( target ) { //Default Action target.find(".tab_content").hide(); //Hide all content target.find("ul.tabs li:first").addClass("active").show(); //Activate first tab target.find(".tab_content:first").show(); //Show first tab content //On Click Event target.find("ul.tabs li").click(function() { target.find("ul.tabs li").removeClass("active"); //Remove any "active" class $(this).addClass("active"); //Add "active" class to selected tab target.find(".tab_content").hide(); //Hide all tab content var activeTab = $(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content activeTab = activeTab.replace( '#', '.' ); target.find(activeTab).fadeIn(); //Fade in the active content return false; }); }// $.hoge // -------------------------------------- $(function() { $.hoge( $('#num1') ); $.hoge( $('#num2') ); }); </script> </head> <body> <div id="num1" class="container"> <ul class="tabs"> <li><a href="#tab1">Gallery</a></li> <li><a href="#tab2">Submit</a></li> </ul> <div class="tab_container"> <div class="tab1 tab_content"> <h2>Gallery</h2> </div> <div class="tab2 tab_content"> <h2>Submit</h2> </div> </div> </div> <div id="num2" class="container"> <ul class="tabs"> <li><a href="#tab1">Gallery</a></li> <li><a href="#tab2">Submit</a></li> </ul> <div class="tab_container"> <div class="tab1 tab_content"> <h2>Gallery</h2> </div> <div class="tab2 tab_content"> <h2>Submit</h2> </div> </div> </div> </body> </html>

  • ページを最初に表示したときオンになるタブを作る方法(css,javascript)

    cssとjavascriptを使ってタブを使用したページを作っています。 ページ表示時に一番左に表示される01タブを黒く表示しておいてほしいのですが、うまくいきません。 元にしたサンプルはちゃんと表示される仕様になっていましたが、いじっているうちにおかしくなったようです。 原因がわからないのでアドバイスいただけると大変ありがたいです。 よろしくお願い致します。 下記が制作中のhtmlです。 http://www014.upp.so-net.ne.jp/kanikko/test/test.html js中身******************* /*--setup--*/ window.onload=function() { tab.setup = { tabs: document.getElementById('tab').getElementsByTagName('li'), pages: [ document.getElementById('topics01'), document.getElementById('topics02'), document.getElementById('topics03'), document.getElementById('topics04'), document.getElementById('topics05'), document.getElementById('topics06'), document.getElementById('topics07') ] } tab.init(); } /*--setup end--*/ var tab = { init: function(){ var tabs = this.setup.tabs; var pages = this.setup.pages; for(i=0; i<pages.length; i++) { if(i !== 0) pages[i].style.display = 'none'; tabs[i].onclick = function(){ tab.showpage(this); return false; }; } }, showpage: function(obj){ var tabs = this.setup.tabs; var pages = this.setup.pages; var num; for(num=0; num<tabs.length; num++) { if(tabs[num] === obj) break; } for(var i=0; i<pages.length; i++) { if(i == num) { pages[num].style.display = 'block'; tabs[num].className = 'selected'; } else{ pages[i].style.display = 'none'; tabs[i].className = null; } } } } css中身******************* #javascript_tab_sample { width:448px; background:#ffffff; border:1px solid red; margin-bottom:10px; text-align:left; } #javascript_tab_sample ul#tab { margin:0; padding:0; border:1px solid black; background:blue; float:left; width:100%; } #javascript_tab_sample ul#tab li { text-align:center; border:1px solid orange; border-bottom:none; float:left; width:5em; } #javascript_tab_sample ul#tab li.selected { background-color:#000; } #javascript_tab_sample ul#tab li.selected a { color:#fff; }

    • ベストアンサー
    • HTML
  • Jquery タブで、4つのliのうち、ひとつだけ除外

    お世話になります。あともう少しのところでうまくいきません! http://papermashup.com/demos/jquery-tabs/ 上記を使ってタブをやっています 【html】 <div id="test"> <ul> <li class="menu01"><a href="#tab-1">タブ1</a></li> <li class="menu02"><a href="#tab-2">タブ2</a></li> <li class="menu03"><a href="#tab-3">タブ3</a></li> <li class="menu04"><a href="/test/">こいつだけ違うページへ</a></li> </ul> <div id="tab-1">タブ1の中身</div> <div id="tab-2">タブ2の中身</div> <div id="tab-3">タブ3の中身</div> </div> 【Jquery】 <script type="text/javascript"> $(document).ready(function(){ $('#topserch div').hide(); $('#topserch div:first').show(); $('#topserch ul li:first').addClass('active'); $('#topserch ul li a').click(function(){ $('#topserch ul li').removeClass('active'); $(this).parent().addClass('active'); var currentTab = $(this).attr('href'); $('#topserch div').hide(); $(currentTab).show(); return false; }); }); </script> まずこのままだ4つ目のリンクはまったく動きません。 そこで、return false;を取ると、当然変な動きになります。 <li class="menu04"><a href="/test/">こいつだけ違うページへ</a></li> をクリックした時だけ、普通に別のページにジャンプさせるにはどうしたらよいのでしょうか?

  • 【javascript で動的に a タグ内に onclick属性を出力する方法】 について

    javascript での 【 html 内への動的タグ生成】について、 javascript にご理解のある方にお教え頂けますと大変嬉しです。 かなり基本的なことで恐縮ですが、当方デザインサイドの人間で javascript も理屈の情報流し読みだけで、全く自ら書く練習をしていない不理解者です。 それでも急ぎで解決してゆきたい問題があり。 どなた様か、何卒宜しくお願い申し上げます。 ---------------------------------------------------------------- 作ろうとしているのは、【現在の Yahoo JAPAN! のTOPページ上部の、ページURLを切り替えずにタブをチェンジして、それに対応する下部の div の内容を切り替える】というインターフェイスです。 ただ、IE5.5 などで全くまともに動作しないので、IE5.5を含んだクロスブラウザ対応のため、【Ajax ライブラリのタブチェンジ】ではなく、巷の情報をアレンジした自前 javascript で作っています。 以下のようなタグを javascript で動的に生成する記述を書いているのですが、これが 【現在の Yahoo JAPAN! TOP】の上部クリック切替タブに相当するものです。 <ul class="menu1" id="nav"> <li id="menu1Nav"><a href="#menu1">メニュー1</a></li> <li id="menu2Nav"><a href="#menu2">メニュー2</a></li> <li id="menu3Nav"><a href="#menu3">メニュー3</a></li> <li id="menu4Nav"><a href="#menu4">メニュー4</a></li> <li id="menu5Nav"><a href="#menu5">メニュー5</a></li> </ul> 書く <li><a></a><li> は、CSS 側の記述で display:block; 化して 幅×高さ を統一するように指定しており、クリックした際は「ボタン」的な長方形の outline が【点線】で表示されます。 ------------------------------------------------------ そのタブを動的生成する関連メソッドが、 function createListItem(id,href,text) { var li = document.createElement("li"); var a = document.createElement("a"); var t = document.createTextNode(text); li.setAttribute('id',id); a.setAttribute('href',href); a.appendChild(t); li.appendChild(a); return li; } function setTabClick(listName,categoryName) { var e = document.getElementById(listName).getElementsByTagName('a')[0]; e.onclick = function(){ showCategory(categoryName); return false; }; } です。 ------------------------------------------------------ このとき【Yahoo JAPAN! TOP 切替タブ】は、クリックした際に outline の【点線】が全く表示されないのでスマートですが、 CSS 側で 当該 li a タグに outline:none; を指定していても、 IE8 や firefox などモダンブラウザではそれだけで「クリック時の周囲【点線】」が見えなくなりますが、 まだシェアの多い IE6/IE7 などでは outline プロパティに対応していないため、クリックしてタブを切り替えたときに、見苦しい【周囲枠点線】が残ってしまいます。 そこで巷の情報より、<a onfcus="this.blur()" id"~">テキスト</a> を挿入すれば、それが見えなくなるとのことで、この動的に生成する <li><a> の a タグの中に onfcus="this.blur()" を常に入れるようにして試してみたいのですが、 ★ <a href="#menu1"> などのラスト部分に、毎回同様にうまく挿入する記述方法について、教えて頂けますと大変幸いです。 上の2つのメソッドのどちらかで、その部分の追加記述ができると嬉しいのですが、a.setAttribute(); / e.onfocus = などで少し試してみるも、元々記述構造をよく理解していないため、意図する結果は得られません。 ------------------------------------------------------ 【上記の onfcus="this.blur()" を 各 a タグの最後に動的に毎回追加する記述方法】 のみで良いのですが、どなた様かお知恵をお借りできませんでしょうか。 自分で長時間試行錯誤する余裕が全くなく、もし早めにコメントを頂けますと大変幸いです。 どうぞ宜しくお願い申し上げます。

  • スクリプトで<div id="links">

    下記スクリプトで<div id="links"></div>のところを 開いた瞬間 <ul> <li><a href="http://foo.com/">foo</a></li> <li><a href="http://bar.com/">bar</a></li> </ul> に変換したいのですがうまくいきません どこをどのように変更すれば変換されるのでしょうか 【スクリプト】 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript"> var URL = new Array("http://foo.com/","http://bar.co.jp/"); var TITLE = new Array("foo","bar"); // 表示用コンテナ var container = document.getElementById('links'); // リセット container.innerHTML=''; var ul=document.createElement('ul'); container.appendChild(ul); for(var i=0;i<URL.length;i++){ var li=document.createElement('li'); var a=document.createElement('a'); // 'href'属性の設定 a.setAttribute('href',URL[i]); // ラベル a.appendChild(document.createTextNode(TITLE[i])); li.appendChild(a); ul.appendChild(li); } </script> </head> <body> <div id="links"></div> </body> </html>

  • JSONPを処理するにはどうすればいいですか?

    http://www.baldanders.info/spiegel/remark/archives/000222.shtml このページの下部のサンプルスクリプトを function getjsonp(url){ で囲ってurlを渡してJSONPデータを処理しようとしたのですが、 hundler is not defined とエラーが出てしまいます。 サンプルスクリプトのそのままのコードでは動くのです。 オブジェクト指向がよくわかっていないのでどうすればいいか、識者の方教えてください。 宜しくお願いします。 下記がエラーするスクリプトです。 <script type="text/javascript" src="/js/jsr_class.js"></script> <div id="bookmark"></div> <script type="text/javascript"> var url ='http://del.icio.us/feeds/json/spiegel?callback=hundler'; getjsonp(url); function getjsonp(url){ var oJsr = new JSONscriptRequest(url); oJsr.buildScriptTag(); oJsr.addScriptTag(); function hundler(data) { var ul = document.createElement('ul'); for (var i=0, post; post = data[i]; i++) { var li = document.createElement('li'); var a = document.createElement('a'); a.setAttribute('href', post.u); a.appendChild(document.createTextNode(post.d)); li.appendChild(a); ul.appendChild(li); } document.getElementById('bookmark').appendChild(ul); oJsr.removeScriptTag(); } } </script>

  • Apend前のElementの中のElement

    var div = document.createElement('div'); div.innerHTML="hogehoge<div id='hoge'>aaa</div>"; とし、 このdivの中のelementをID指定で取得したいです。 document.body.appendChild(div); とした後なら、 document.getElementById('hoge') で取得できるのですが、 appendChildしたくないです。 ご名案ありましたら、ご教授ください。宜しくお願いいたします。

  • for in と 接続演算子について

    <!-- function check(){ var flag = 0; if(document.registform.user.value==""){ flag = 1; var error1 = document.getElementById("error1"); if(error1 == null){ var element1=document.createElement("div"); element1.innerHTML='<span class="error0" id="error1">ユーザー名を入力してください。</span>'; var ojbody1=document.getElementById("td_error1"); ojbody1.appendChild(element1); } } if(document.registform.pass.value==""){ flag = 1; var error2 = document.getElementById("error2"); if(error2 == null){ var element2=document.createElement("div"); element2.innerHTML='<span class="error0" id="error2">パスワードを入力してください。</span>'; var ojbody2=document.getElementById("td_error2"); ojbody2.appendChild(element2); } } if(document.registform.pass2.value==""){ flag = 1; var error3 = document.getElementById("error3"); if(error3 == null){ var element3=document.createElement("div"); element3.innerHTML='<span class="error0" id="error3">パスワード(確認)を入力してください。</span>'; var ojbody3=document.getElementById("td_error3"); ojbody3.appendChild(element3); } } if(flag == 0){ return true; }else{ return false; } } //--> javascript初心者です。 この処理をfor(key in array)を使って簡単にできるかも... と思ったんですが接続演算子の使い方がよくわかりません。 プログラム自体初心者独学で手探りでやっているため考え方が間違っている場合などありましたらアドバイス等もいただけたらうれしいです。 if(document.registform.user(☆).value==""){ flag = 1; var error1(☆) = document.getElementById("error1(☆)"); if(error1(☆) == null){ var element1(☆)=document.createElement("div"); element1(☆).innerHTML='<span class="error0" id="error1(☆)">ユーザー名(☆)を入力してください。</span>'; var ojbody1(☆)=document.getElementById("td_error1(☆)"); ojbody1.appendChild(element1(☆)); }} (☆)のところが接続演算子が使えればと思いました。 例えばvar element + key でelement1の変数というのは無理なのでしょうか? もし可能ならgetElementById("error + key ")はどういった書き方をすればよいでしょうか? よろしくお願いします。

  • scriptリンクの別画面表示

    はじめまして。 ホームページのトップにブログの件名をニュースとして一覧表示したくて Google AJAX Feed API を利用しました。 表示自体はうまくいったのですが、 この記事へのリンクを別ウィンドウで開くようにするにはどうすればいいのでしょうか? 当方、JavaScriptは全く分からずで困っております・・・ おわかりの方、いらっしゃいましたらよろしくお願いいたします。 【html header 部分】 <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("http://blog.XXXXX.XXX"); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var li = document.createElement("li"); var a = document.createElement("a"); a.href = entry.link ;       var date = new Date(entry.publishedDate); var titlelink = entry.title; a.appendChild(document.createTextNode( "・" + date.toDateString() + " " +titlelink)); li.appendChild(a); container.appendChild(li); } } }); } google.setOnLoadCallback(initialize); </script> 【html body 部分】 <div id="feed"></div> 以上、どうぞよろしくお願いいたします。