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

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

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

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

Q&A

解決済

4回答

4388閲覧

親要素なしの並列divのDOMの作成方法。

tkshp

総合スコア174

JavaScript

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

0グッド

0クリップ

投稿2020/04/09 14:48

編集2020/04/16 17:09

前提・実現したいこと

JavaScriptで下記のようなDOMは、どのようにすれば作成できますか?
ご教示お願いします。

<div>要素1</div><div>要素2</div><div>要素3</div>

試したこと

下記のようなDOMを作成することはできました。

JavaScript

1var dom = document.createElement("div") 2dom.innerHTML = "<div>要素1</div><div>要素2</div><div>要素3</div>"; 3console.log(dom);

実行結果。

<div><div>要素1</div><div>要素2</div><div>要素3</div></div>

しかし、下記ではエラーになってしまいます。

JavaScript

1var dom = document.createElement("<div>要素1</div><div>要素2</div><div>要素3</div>"); 2console.log(dom);
Uncaught DOMException: Failed to execute 'createElement' on 'Document': The tag name provided ('<div>要素1</div><div>要素2</div><div>要素3</div>') is not a valid name.

### 追記
ご回答ありがとうございます。
今回、教えていただき、そもそも質問の前提が間違っていることがわかりました。
やりたかったことは、こちらの質問に書きました。

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

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

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

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

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

kei344

2020/04/09 15:01

それをどのように使いたいのか、何を解決するためにそういう操作をしようとしているかを、質問文に追記していただけませんか?
tkshp

2020/04/16 17:12

コメントが遅くなり、申し訳ありません。 やりたかったことは、追記に書きました。
guest

回答4

0

js

1const div = document.createElement('div'); 2for (let i = 1; i <= 3; i++) { 3 const div1 = document.createElement('div'); 4 div1.textContent = "要素" + i; 5 div.appendChild(div1); 6} 7console.log(div); 8//"<div><div>要素1</div><div>要素2</div><div>要素3</div></div>"

js

1for (let i = 1; i <= 3; i++) { 2 const div1 = document.createElement('div'); 3 div1.textContent = "要素" + i; 4 document.body.appendChild(div1); 5}

js

1document.body.innerHTML = "<div>要素1</div><div>要素2</div><div>要素3</div>";

ドキュメントオブジェクトモデル (DOM) - Web API | MDN
DOM のモデルは文書を論理的なツリーで表現します。ツリーのそれぞれの枝はノードで終わっており、それぞれのノードがオブジェクトを含んでいます。

上記が理解できれば、
<div>要素1</div><div>要素2</div><div>要素3</div>
はDOMではなく、単なるノードの集合ということも分かると思います。(ツリーになっていない)

結局、最終的に何をしたいのかを書かないと質問として意味がないです。

投稿2020/04/09 21:23

編集2020/04/09 23:34
hatena19

総合スコア34075

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

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

tkshp

2020/04/16 17:11

コメントが遅くなり、申し訳ありません。 教えていただき、DOMを理解せずに質問していたことがわかりました。 ご教示いただき、ありがとうございました。 またやりたかったことは、追記に書きました。
guest

0

親要素なしの並列divのDOMの作成方法

親に**要素(ELEMENT_NODE)ではなく別のノード(DOCUMENT_FRAGMENT_NODE)**を持ち、その子孫を得る例

javascript

1var frag=document.createDocumentFragment(); 2var markup=""; 3for(;frag.childNodes.length<=3;) { 4 let div = document.createElement("div"); 5 frag.appendChild( div ); 6 div.textContent = "要素"+frag.childNodes.length; 7 markup += div.outerHTML; 8} 9console.log(...[frag.childNodes]); // NodeList 10console.log(...[frag.children]); // HTMLCollection 11console.log(markup); // markup

親要素なしでマークアップを得るには、outerHTML を使って文字列結合する案しか思いつきませんでした。

投稿2020/04/10 01:48

編集2020/04/10 01:50
AkitoshiManabe

総合スコア5434

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

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

tkshp

2020/04/16 17:11

コメントが遅くなり、申し訳ありません。 教えていただき、DOMを理解せずに質問していたことがわかりました。 ご教示いただき、ありがとうございました。 またやりたかったことは、追記に書きました。
guest

0

ベストアンサー

きっちりdomで処理したいならこう。
親なしのdomの集合は、HTML要素にならないのでよく理解を深めたほうがよいでしょう
(NodeListやHTMLCollectionならOK)

投稿2020/04/10 00:42

編集2020/04/10 00:43
yambejp

総合スコア116734

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

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

yambejp

2020/04/10 00:44

const div=[ ['要素1'].reduce((x,y)=>(x.appendChild(document.createTextNode(y)),x),document.createElement('div')), ['要素2'].reduce((x,y)=>(x.appendChild(document.createTextNode(y)),x),document.createElement('div')), ['要素3'].reduce((x,y)=>(x.appendChild(document.createTextNode(y)),x),document.createElement('div')), ].reduce((x,y)=>(x.appendChild(y),x),document.createElement('div')); console.log(div);
yambejp

2020/04/10 00:51

もしくは並列のHTMLのnode名や属性が同じなら const div=['要素1','要素2','要素3'].map( x=>[x].reduce( (x,y)=>(x.appendChild( document.createTextNode(y) ),x),document.createElement('div')) ).reduce( (x,y)=>(x.appendChild(y),x),document.createElement('div')); console.log(div);
tkshp

2020/04/16 17:11

コメントが遅くなり、申し訳ありません。 教えていただき、DOMを理解せずに質問していたことがわかりました。 ご教示いただき、ありがとうございました。 またやりたかったことは、追記に書きました。
guest

0

JavaScript

1var dom1 = document.createElement("div") 2var dom2 = document.createElement("div") 3var dom3 = document.createElement("div") 4var dom4 = document.createElement("div")

投稿2020/04/09 14:58

Takumiboo

総合スコア2536

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

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

tkshp

2020/04/16 17:12

コメントが遅くなり、申し訳ありません。 ご教示いただき、ありがとうございました。 またやりたかったことは、追記に書きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問