質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1301閲覧

jquery.cookieで、配列を登録することができません

5656shitai

総合スコア15

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/11/19 10:47

編集2018/11/19 12:31

前提・実現したいこと

jqueryプラグイン「jquery.cookie」で、クリック履歴を50件登録していきたいと思っています。

クリックした.postの中の<p><a>を拾い、それを#historyにリストで出力するということを実現したいです。

発生している問題・エラーメッセージ

クリックしても作動しません。

該当のソースコード

html

1<!--cookie保存対象--> 2<div class="post post1"> 3 <p>title1</p><a href="link1">link1</a> 4</div> 5<div class="post post2"> 6 <p>title2</p><a href="link2">link2</a> 7</div> 8<div class="post post3"> 9 <p>title3</p><a href="link3">link3</a> 10</div> 11 12<!--ここにcookieを出力--> 13<div id="history"> 14</div> 15 16<!--たとえば、 .post1のクリック時は以下のように出力したい--> 17<div id="history"> 18<ul> 19<li><a href="link1">title1<a/></li> 20</ul> 21</div> 22 23<!--jQuery.cookieのコード--> 24<script type="text/javascript"> 25$(function(){ 26 27 // クッキー登録 28 $('body').on("click",'.post',function(){ 29 30 var historytitle = $(this).find('p').text(); 31 var historylink = $(this).find('a').attr('href'); 32 33 // 配列にタイトルとリンクを保存 34 var params = [ { title: '', link: ''} ]; 35 if($.inArray(history, params) < 0){ 36 params.title.push(historytitle); 37 params.link.push(historylink); 38 } 39 40 // クッキーに保存 41 $.cookie('クリック履歴', { path: "/" }); 42 43 }); 44 45 // クッキー呼び出し 46 var cookie = $.cookie('クリック履歴'); 47 if(cookie){ 48 $('#history').html('<ul><li>'+cookie+'</li></ul>'); 49 } 50 51});

試したこと

単にこうすると登録できるので、プラグイン自体は作動しているようです。

$(function(){

// クッキー登録 $('body').on("click",'.post',function(){

$.cookie('クリック履歴', { path: "/" });
});

});

補足情報

【プラグインサイト】
・GitHub
https://github.com/carhartl/jquery-cookie

【参考サイト】
・jQueryプラグイン「jquery.cookie.js」でcookieを簡単に扱う
https://www.tam-tam.co.jp/tipsnote/javascript/post3109.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

文字列しか保存できません。
過去回答も参考にしてください。

投稿2018/11/19 10:57

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんな感じかな

javascript

1<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 3<script> 4$(function(){ 5 var his_length=5; 6 $('#del').on('click',function(){ 7 $.removeCookie('click_his'); 8 $('#history').html(""); 9 }); 10 $('.post').on('click',function(){ 11 var title = $(this).find('p').text(); 12 var link = $(this).find('a').attr('href'); 13 var params = JSON.parse($.cookie('click_his')||"{}"); 14 if(typeof params!=="object" || typeof params.title=="undefined"){ 15 params={ title: [], link: [] }; 16 } 17 params.title.push(title); 18 params.link.push(link); 19 if( params.title.length>his_length){ 20 params.title.shift(); 21 params.link.shift(); 22 } 23 var ul=$('<ul>'); 24 params.title.forEach(function(x,y){ 25 $('<li>').append($('<a>').attr('href',params.link[y]).text(x)).appendTo(ul); 26 }) 27 $('#history').html(ul); 28 $.cookie('click_his', JSON.stringify(params)); 29 }); 30}); 31</script> 32<div class="post post1"> 33 <p>title1</p><a href="link1">link1</a> 34</div> 35<div class="post post2"> 36 <p>title2</p><a href="link2">link2</a> 37</div> 38<div class="post post3"> 39 <p>title3</p><a href="link3">link3</a> 40</div> 41 42<div id="history"></div> 43<div id="del">del</div>

調整しました

投稿2018/11/20 01:22

編集2018/11/20 07:04
yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/11/20 07:04 編集

ごめんなさい、初期化のところで間違いがあったので修正しました 再度コピペで調整してみて下さい
5656shitai

2018/11/20 23:32

とんでもないです。ご修正ありがとうございます。 ご修正のもの(そして .post1 .post2 .post3 というクラスを削除しました)がこちらです。 https://jsfiddle.net/a9zmcs06/1/ あと1点だけお伺いしたいのですが(すみません!)、「削除」をクリックすると履歴は1件ずつ溜まりますが、しかし「削除」をクリックしないと一気に5件溜まってしまうようで、これは何が原因でしょうか?
yambejp

2018/11/21 00:20

>「削除」をクリックしないと一気に5件溜まってしまう んー。それってクッキーにためたのが残っているからじゃないでしょうか? ロード時にhistoryに表示する処理をいれていないので 一気にたまったように見えますが、単に前回の履歴だと思います
5656shitai

2018/11/21 00:40

まぬけすぎましたね…笑 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問