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

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

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

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

HTML

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

Q&A

解決済

1回答

1429閲覧

appendChildで追加した要素が消えてしまう

fefefe

総合スコア1

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2021/06/21 10:49

編集2021/06/21 11:08

前提・実現したいこと

初心者です。単語帳を作ろうとしています。

【実現したいこと】
textareaから値を取得して、その値でselectにoptionを新規追加する。

【現状】
確かに”登録”を押すと一時的にoptionが増え、選択ができるようになるが、ページを更新(F5)すると消える。

appendChildを使えば、要素がHTMLのソースコードに直接書き込まれ保存されると思っていたのですが、違うのでしょうか?サーバーサイドでしかできないのでしょうか。

当たり前のことを聞いていたら、すいません。
対応策を教えて頂ければと思います。よろしくお願いいたします。

該当のソースコード

<p>カテゴリー選択</p> <select name="select" id="select" class="form"> <!-- select --> <option id="category1"> </option> </select> <textarea rows="1" cols="30" id="newCategory" placeholder=" 新しいカテゴリーをつくる"></textarea> <button type="submit" name="登録" id="click" onclick="onButtonClick()">登録</button> </main> <script type="text/javascript"> function onButtonClick(){ const categoryName = document.getElementById("newCategory").value; //新規カテゴリの値を取得 const categoryId = document.createElement("option"); //オプションを作成 const categoryLength = document.getElementById("select"); //既存オプション数+1を、新規オプションのID名として設定↓ categoryId.id = "category"+categoryLength.length+1; categoryId.innerHTML = categoryName; //IDをもとにオプションに値を追加 select.appendChild(categoryId); //セレクトに作成したオプションを追加 }; </script>

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

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

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

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

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

guest

回答1

0

ベストアンサー

appendChildを使えば、要素がHTMLのソースコードに直接書き込まれ保存されると思っていたのですが、違うのでしょうか?

JavaScriptの役割を勘違いしています。
ソースコードに書き込みをするというより、「現在表示されている要素(DOM)に対して影響する」だけです。
コードが書かれているHTMLファイルに対して直接書き込むような影響があったり、影響した要素をデータとして保存する機能はありません。

サーバーサイドでしかできないのでしょうか。

Web Storage APIIndexedDB APIなどを利用すれば「ブラウザに」データを保持することはできます。

ただそれはあくまでブラウザごとにデータを保持するので、別のブラウザにまで横断して保持する仕組みはありません。
「データの共有」までするのでしたらサーバサイド通してDBに情報を保持するしかありません。要件次第です。

投稿2021/06/21 11:08

編集2021/06/21 11:09
m.ts10806

総合スコア80875

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

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

fefefe

2021/06/21 11:19

素早く明瞭な回答、ありがとうございます!!本当に助かります。 あくまでフロントエンドの言語なのですね。また調べて、認識を改めたいと思います。 自作の単語帳制作については、今のところデータ共有まではせず、ローカルストレージへの保存もなんとか成功しているので、Web Storage APIの線でもう一度考え直してみます。 ありがとうございました。
m.ts10806

2021/06/21 11:31

>ローカルストレージへの保存 ローカルストレージはWeb Storage APIの機能の1つです。 私が提示したリファレンスの「Web Storage の概念と使用方法」にも説明があります。
fefefe

2021/06/21 12:31

大変失礼いたしました。 上記のソースコード(単語帳のカテゴリを新規につくるコード)から省いた部分で、”新規カテゴリに対して問題文とその答えを新規作成する(単語帳のページをつくる)”コードがあり、 保存に際して、ブラウザを閉じても残っていてほしかったので、ローカルストレージを使用することを決め、保存・取得に成功した、という経緯があります。 現状簡易データベースのような形で使っています。いずれはデータ共有もと考えているので、慣れたら徐々に、MYSQLなどに移行したいと思っています。 言葉が足りず、ご心配かけました。 が、上記の経緯にも自分の勘違いなどがあっては困るので、念のため詳細に説明させていただきました。 長々と申し訳ありません。 IndexedDB APIについては、初めて知った情報でしたので、これから詳しく調べてみます。 独学素人なので、本当に助かります。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問