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

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

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

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

JavaScript

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

jQuery

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

851閲覧

cookieに格納した配列から他のcookieのオブジェクトを取得し、要素を生成したい

NK0920

総合スコア4

Cookie

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

JavaScript

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

jQuery

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2021/07/27 01:03

編集2021/07/27 01:41

前提・実現したいこと

cookieに存在するcookieの名前を格納してある。
存在確認cookieは配列で格納されていて、そこからひとつ一つcookie名を取り出し、読み込む。
存在が確認されているcookieは値がオブジェクトで格納されていて、それらをそれぞれ使って要素を作り出したい。

イメージとしてはこんなかんじ
・生成したい要素をオブジェクトに格納し、cookieに入れ、そのcookie名を存在格納cookieに配列として格納する。
①存在確認cookieからforで一つ一つ読み込む
②存在確認cookieの一つの値は要素情報cookieの名前になっているため、要素情報cookie(オブジェクト)の値を取り出す。
③要素情報cookieから取り出したオブジェクトからそれぞれのキーから値を出し、それを使ってHTMLに要素を生成する。

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

![イメージ説明]
画像のようにtitle1、title2、title3が一つずつ表示されずに、連なって表示される。
本当は一つの枠に一つだけのtitle1って感じで実装したい。

jqueryやjavascriptは初心者です

該当のソースコード

html

1<div class="catalog"></div>

JavaScript

1var gotExsistArray = $.cookie('existCookie'); 2 console.log(gotExsistArray) 3 for (let i = 0; i < gotExsistArray.length; i++) { 4 5 var notes = gotExsistArray[i]; 6 var noteContent = $.cookie(notes); 7 console.log(noteContent); 8 if(noteContent !== undefined){ 9 10 var numberData = String($.cookie(notes).number); 11 var titleData = noteContent.title; 12 var tagData = noteContent.tags; 13 var contentData = noteContent.content; 14 var makeTitle = $('<h2></h2>',{ 15 "class":"showedTitle" 16 }) 17 makeTitle.html(titleData); 18 19 var makeTag = $('<div></div>',{ 20 "class":"showedTag" 21 }) 22 var shappedTag = ""; 23 tagData.forEach(function(value){ 24 shappedTag = shappedTag + '<p class="Tag">' + "#" + value + '</p>' 25 }); 26 27 28 makeTag.html(shappedTag) 29 30 var makeWarraper = $('<div></div>',{ 31 "class":"showedWrapper", 32 "id":numberData 33 }) 34 35 $('.catalog').append(makeWarraper) 36 37 $('.showedWrapper').append(makeTitle) 38 $('.showedWrapper').append(makeTag) 39 40 console.log(makeTitle) 41 42 }else{ 43 console.log('エラー') 44 } 45 46 }

試したこと

途中で生成しようとした要素(タイトル)をコンソールに表示すると、合計で3回しかタイトルは生成していないことになっていますが、実際は一つのshowedWrapperの中にタイトル要素はそれぞれ1,1,1ではなくて3,2,1という生成をしています。
検証ツールのコンソールはこんな感じ
イメージ説明

補足情報(FW/ツールのバージョンなど)

cookie情報
$.cookie('existCookie',
["note1","note2","note3"]
)
$.cookie('note1', {
"number":1,
"title":"title1",
"tags":["tag1","tag1","tag1"],
"content":"これはtitle1の内容です。"
}
)

使用ライブラリ
jquery3.5.1
jquery.cookie.js

動作環境
macOS Bigsur
chrome

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

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

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

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

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

guest

回答2

0

ベストアンサー

js

1 for (let i = 0; i < gotExsistArray.length; i++) { 2 3//... 4 5 var makeWarraper = $('<div></div>',{ 6 "class":"showedWrapper", 7 "id":numberData 8 }) 9 10 $('.catalog').append(makeWarraper) 11

となっているため、.showedWrapperは、最終的にgotExsistArray.lengthだけ生成されます。(例であれば3つ)
そこに、

js

1 $('.showedWrapper').append(makeTitle) 2 $('.showedWrapper').append(makeTag)

とするのですから、その時に存在するすべての.showedWrapperに(要素情報cookieから作り出した)コンテンツのコピーが追加されます。(例のtitle3時点ならば3つ)

Important: If there is more than one target element, however, cloned copies of the inserted element will be created for each target except for the last one.

.append() | jQuery API Documentation


解決方法ですが、$('.showedWrapper')に追加すると想定しない結果になるので、そうではなく、生成した要素にappend()メソッドを使えばいいかと思います。

投稿2021/07/27 02:18

Lhankor_Mhy

総合スコア36074

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

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

NK0920

2021/07/27 03:08

なるほど!ありがとうございます!解決致しました。
Lhankor_Mhy

2021/07/27 03:16

お役に立てたようで何よりです。
guest

0

$.cookie('existCookie') = ["note1","note2","note3"]

ちょっと何をしたいのかわかりません
$.cookieへの値のセットは

javascript

1$.cookie('existCookie',str);

という処理になります。
またクッキーには文字列しかセットできないので配列をセットするなら

javascript

1$.cookie('existCookie',JSON.stringify(["note1","note2","note3"]));

投稿2021/07/27 01:12

yambejp

総合スコア114777

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

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

NK0920

2021/07/27 01:40

ああ、ごめんなさい、わかりやすいように、格納していることを示したかったのですが、わかりづらかったですね。仰る通り、$.cookie('existCookie',["note1","note2","note3"]) です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問