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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

JavaScript

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

HTML

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

Q&A

解決済

3回答

696閲覧

__proto__へ値を代入したい

shunsaku2004

総合スコア2

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2021/10/03 13:09

編集2021/10/05 02:37

前提・実現したいこと

JavaScript

1let input = document.createElement(“input”); 2input.type = “radio”; 3input.name=“radio”; 4/*以下input.○○が続く*/

htmlへの要素追加について、
現在、上記のように値を代入しているのですが、どうしても見づらくなってしまうと感じている為、これを変数ごとに1つにまとめる手法はないかと思い質問させて頂きました。

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

JavaScript

1input ={ 2 type : “radio”, 3 name : “radio”, 4/*続く*/ 5}

のように宣言してみたのですが、変数に代入はできるものの__proto__とprototypeの違いにより、appendChild(input)の部分でエラーが出てしまいます。

JavaScript

1let list = document.getElementById("listA"); 2list.appendChild(input); 3/*エラーメッセージ*/ 4/*VM11904:2 Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'. 5 at <anonymous>:2:10 6(anonymous) @ VM11904:2*/ 7

該当のソースコード

javascript

1let input = document.createElement(“input”); 2/*現在のソースコード*/ 3/*1つ1つ記入していくと見づらくなる*/ 4input.type = “radio”; 5input.name=“radio”; 6input.className="radioA"; 7/**/ 8/*理想形*/ 9/*下記のように1つにまとめたい*/ 10input={ 11 type :"radio", 12 name :"radio", 13 className :"lradioA" 14} 15/**/ 16let list = document.getElementById("listA"); 17list.appendChild(input); 18

試したこと

prototypeと__proto__の違いが原因でエラーが出ているところまでは分かったのですが、__proto__に値を代入する方法が調べてもわからなかったです。
よろしくお願いいたします。

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

・参考資料
JavaScript 要素を追加/削除する(createElement他)/ITSakura Blog for business and development
https://itsakura.com/js-createelement

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

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

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

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

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

guest

回答3

0

prototypeとprotoの違いが原因でエラーが出ているところまでは分かったのですが、

DOMツリーに足せるのはdocument.createElement() などDOMノードとして作成したオブジェクトだけです。プロトタイプを調整しても無理だと思います。document.createElement()をなくすことはできません。

Object.assign()などと組み合わせて、さらに関数化しておけば簡潔に書けるのではないでしょうか。

js

1function createElementWithProps(factory, tagName, props) { 2 return Object.assign(factory.createElement(tagName), props); 3} 4 5let input = createElementWithProps(document, 'input', { 6 type :"radio", 7 name :"radio", 8 className :"lradioA" 9}));

投稿2021/10/05 02:47

編集2021/10/05 02:53
int32_t

総合スコア21695

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

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

shunsaku2004

2021/10/10 14:40

int32_tさん 稚拙な質問ながらご回答いただきありがとうございます。 assignがまさに求めていた内容でした。 今回、悩みを解決できた中で一番回答の早かった方へのベストアンサーとなったので選ぶことはできませんでしたが、とても勉強になりました! ありがとうございました!
guest

0

ベストアンサー

Object.assignを使うのが妥当かと思います。

javascript

1let input = document.createElement("input"); 2Object.assign(input, { 3 type :"radio", 4 name :"radio", 5 className :"lradioA" 6}) 7 8let list = document.getElementById("listA"); 9list.appendChild(input);

__proto__を書き換える」ということをやると、DOMオブジェクトでなくなってしまいます。HTMLに投入するエレメントには使えない技です。

投稿2021/10/05 02:46

編集2021/10/05 02:47
maisumakun

総合スコア146018

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

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

shunsaku2004

2021/10/10 14:32

maisumakunさん ありがとうございます! まさに回答いただいた内容をもとめていました! 稚拙な質問ながらご対応いただきありがとうございます。 他の方の回答もものすごく役に立つ内容であるのですが、求めていた内容の回答の中で一番回答の時間が早かったのでベストアンサーにさせていただきます。 ありがとうございました!
guest

0

ご希望の動作が今一つわからないのですが、これのことですか?

Object.setPrototypeOf() - JavaScript | MDN

投稿2021/10/05 02:41

Lhankor_Mhy

総合スコア36960

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問