🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Cookie

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

816閲覧

jquery.cookie.jsを使ってリストの画像をそれぞれ切り替えたい

pppx

総合スコア11

Cookie

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/03/23 02:43

実装したいこと

html

1■index.php 2<ul> 3<li><a href="/1.php"><img src="images/img1.jpg"></a></li> 4<li><a href="/2.php"><img src="images/img2.jpg"></a></li> 5<li><a href="/3.php"><img src="images/img3.jpg"></a></li> 6<li><a href="/4.php"><img src="images/img4.jpg"></a></li> 7</ul>

例えば、img1.jpgのリンクをクリックしたら

<li><a href="/1.php"><img src="images/img1-active.jpg"></a></li> に画像パスを書き換え、ページに戻ってきても「img1-active.jpg」のままにしたいです。 ### 使用js jquery 3.4.1 jquery.cookie.js 1.4.1

試したこと・不明点

js

1$.cookie("test", 0, { expires: 1 }); 2var hoge = $("ul li a"); 3 4function check(){ 5 var hoge_img = hoge.children("img").attr("src"); 6 if($.cookie("test") == 1) { 7  var hoge_change = hoge_img.replace(".jpg", "-active.jpg"); 8  hoge.children("img").attr("src", hoge_change); 9 } 10}; 11 12$("ul li a").on("click", function(){ 13 $.cookie("test", 1); 14 check(); 15});

上記のコードを記述したのですが、
まず画像をクリックすると全ての画像パスが変わってしまいます。
これは「function check()」の中で<li>の画像パス全てを参照してしまっているのが原因なのはわかるのですが、
この中で$(this)を使えないので解決策が思い浮かびません。

次に、cookie”test”を、ボタンクリックで0から1に値を上書きしているのですが
ページを更新するともとに戻ってしまいます。
こちらも、原因は一行目のcookieをセットする記述があるからだとはわかるのですが
ではどこに記述すれば・・・?と悩んでおります。

上記の記述からどう変えていけばうまく動作するのか、アドバイスをお願いいたします。

※関係ないとは思いますが、まだサーバにアップする前でMAMPを使用してローカルで作業しています。

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

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

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

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

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

yambejp

2021/03/23 04:11

アンカーをクリックして画像を変更するだけなら、アンカーはいらなくないですか?
pppx

2021/03/23 04:32

yambejpさん、コメントありがとうございます。 アンカーというのは「アンカーリンク」の認識で合っていますか? 今回アンカーリンクは使用しておりませんが、別の箇所のことでしたらすみませんがお教えください。
yambejp

2021/03/23 04:34

<a href="/1.php"><img src="images/img1.jpg"></a> をクリックしたら <a href="/1.php"><img src="images/img1-active.jpg"></a> になるんですよね?
pppx

2021/03/23 04:39

はい、上記で合っております。 1.phpへ遷移した後にindex.phpへ戻ったり、index.phpを再読み込みしても「-active」がついたままにしたいです。
guest

回答1

0

javascript

1function changeImgSrc(t){ 2 if($(t).is('img[src$=".jpg"]:not([src$="-active.jpg"])')){ 3 $.cookie('imgIndex',$('img').index(t)); 4 $('img[src$="-active.jpg"]').attr('src',function(){return $(this).attr('src').replace(/-active(?=.jpg$)/,'')}); 5 $(t).attr('src',$(t).attr('src').replace(/(?=.jpg$)/,'-active')); 6 } 7} 8$(function(){ 9 if($.cookie('imgIndex')) changeImgSrc($('img').eq($.cookie('imgIndex'))); 10 $('a').on('click',function(e){ 11 e.preventDefault(); 12 changeImgSrc(e.target); 13 setTimeout(function(){ 14 location.href=$(this).closest('a').attr('href'); 15 }.bind(this),100); 16 }); 17});

投稿2021/03/23 05:34

編集2021/03/23 05:35
yambejp

総合スコア116663

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

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

pppx

2021/03/23 06:56

ご回答いただき、ありがとうございます。 自分で調べていくうちに、もしかして画像パスの操作はできないのでは・・・と思っていたのですが、できないことはないのですね。大変勉強になります。 考えてくださった記述なのですが、確かにページ遷移や再読み込みをしてもパスが変わったままになっていましたが img2やimg3をクリックすると、クリックしていたimg1がもとに戻ってしまいます。 説明が不足しており申し訳ございません。クリックした要素は全て「-active」をつけるようにするにはどのように記述を加えれば宜しいでしょうか。
yambejp

2021/03/23 07:12

どれか一つがactiveになったら他のactiveは外すものと解釈したのですが違うのですね? activeをもう一度クリックするとアクティブが外れるとかも不要ですか?
pppx

2021/03/23 07:22

わかりにくく申し訳ございません。 クリックした要素は全て「-active」がつくように、クッキー削除しない限り「-active」がついたままで問題ございません。
yambejp

2021/03/23 10:16

function changeImgSrc(idxs){ $('img').filter(function(){ return $(this).is('[src$=".jpg"]:not([src$="-active.jpg"])') && idxs.indexOf($('img').index(this))>-1; }).attr('src',function(){ return $(this).attr('src').replace(/(?=.jpg$)/,'-active'); }); } $(function(){ changeImgSrc(JSON.parse($.cookie('imgIndex')||'[]'));; $('#del').on('click',function(){ $.removeCookie('imgIndex'); }); $('a').on('click',function(e){ if($(e.target).is('img[src$=".jpg"]:not([src$="-active.jpg"])')){ e.preventDefault(); var idxs=JSON.parse($.cookie('imgIndex')||'[]'); var idx=$('img').index(e.target); if(idxs.indexOf(idx)==-1){ idxs.push(idx); $.cookie('imgIndex',JSON.stringify(idxs)); } changeImgSrc(idxs); setTimeout(function(){ location.href=$(this).closest('a').attr('href'); }.bind(this),100); } }); });
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問