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

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

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

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

Q&A

解決済

2回答

1543閲覧

生JavaScriptで、ランダムに配列を取得し、HTMLに描画したい

gamugamu

総合スコア10

JavaScript

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

0グッド

0クリップ

投稿2021/12/01 12:01

編集2021/12/01 12:09

###実現したいこと
#resultへ、var arryをランダムに取得して、『HTMLとして』描画したいです。

###発生している問題
『HTMLとして』でなく、『テキストとして』出力されてしまいます。

###該当のソースコード

JavaScript

1<div id="result"> 2</div> 3 4<script> 5 var arry = [ 6 { 7 "num": "001", 8 "list": "リストA", 9 "content": "コンテンツA" 10 }, 11 { 12 "num": "002", 13 "list": "リストB", 14 "content": "コンテンツB" 15 }, 16 { 17 "num": "003", 18 "list": "リストC", 19 "content": "コンテンツC" 20 } 21 ]; 22 23 var numbers = []; 24 for (var i = 0; i < arry.length; i++ ) { 25 numbers.push(Math.random()); 26 } 27 var randArry = arry.sort(function(a, b) { 28 return numbers[arry.indexOf(a)] - numbers[arry.indexOf(b)]; 29 }); 30 for(var i in randArry){ 31 var h = '<dt>' 32 + randArry[i].num 33 + ':' 34 + randArry[i].list 35 + '</dt>' 36 + '<dd>' 37 + randArry[i].content 38 + '</dd>'; 39 console.log(h); 40 //$("dl#wrap").append(h); 41 } 42 43 // id属性で要素を取得 44 var textbox_element = document.getElementById('result'); 45 46 // 新しいHTML要素を作成 47 var new_element = document.createElement('p'); 48 new_element.textContent = h; 49 50 // 指定した要素の中の末尾に挿入 51 textbox_element.appendChild(new_element); 52 53</script> 54

###試したこと1
appendChildでなくappendを使いましたが変わりありませんでした。

js

1textbox_element.append(new_element);

###試したこと2
最期の部分に直にhを入れましたが、

js

1textbox_element.appendChild(h);

次のエラーでした

error

1(index):81 Uncaught TypeError: 2Failed to execute 'appendChild' on 'Node': 3parameter 1 is not of type 'Node'.

エラーを見るに、「appendChild使うときは、Nodeじゃないとダメだよ」とのことですが、それがなんなのか、意味がよくわかりません。

試したこと3

エラーを参考に、次の変換の関数htmlToNodeを見つけた(参考サイト)のですが、結局同じエラーになってしまいます…

js

1 var htmlToNode = function(htmlStr) { 2 if (!htmlStr || typeof htmlStr !== 'string') return; 3 4 var tmpElmt = document.createElement('div'), 5 i = 0, len = 0, nodes = []; 6 7 // 高速処理するが対応ブラウザを考えinnerHTMLを使用 8 tmpElmt.innerHTML = htmlStr; // tmpElmt.insertAdjacentHTML('beforeend', htmlStr); 9 10 return tmpElmt.childNodes; 11 }; 12 13 // 指定した要素の中の末尾に挿入 14 textbox_element.appendChild(htmlToNode(new_element));

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

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

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

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

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

guest

回答2

0

ベストアンサー

textContent の代わりに innerHTML を試してみて下さい。

//new_element.textContent = h; new_element.innerHTML = h;

<参考>
■ JavaScript textContentとinnerHTMLの違いのサンプル
https://itsakura.com/js-textcontent-innerhtml

投稿2021/12/01 12:17

cx20

総合スコア4648

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

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

gamugamu

2021/12/01 12:24

参考リンクまでありがとうございます。助かりました。
guest

0

javascript

1const a= [ 2 { 3 "num": "001", 4 "list": "リストA", 5 "content": "コンテンツA" 6 }, 7 { 8 "num": "002", 9 "list": "リストB", 10 "content": "コンテンツB" 11 }, 12 { 13 "num": "003", 14 "list": "リストC", 15 "content": "コンテンツC" 16 } 17 ]; 18const b=a.map(x=>[x,Math.random()]).sort((x,y)=>x[1]-y[1]).map(x=>x[0]); 19document.querySelector('#result').appendChild(document.createElement('dl')); 20b.forEach(x=>{ 21 const dt=Object.assign(document.createElement('dt'),{textContent:`${x.num}${x.list}`}); 22 const dd=Object.assign(document.createElement('dd'),{textContent:x.content}); 23 const div=[dt,dd].reduce((x,y)=>(x.appendChild(y),x),document.createElement('div')); 24 document.querySelector('#result dl').appendChild(div); 25});

投稿2021/12/02 00:40

yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問