###実現したいこと
#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));
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/01 12:24