回答編集履歴

1

修正

2020/03/07 10:54

投稿

kairi003
kairi003

スコア1332

test CHANGED
@@ -1,3 +1,31 @@
1
+ jQueryの要素生成は、innerHTMLよりもcreateElementに近いです。jQueryを使うのならば基本的にはjQueryで書くのが良いと思います。チェーンできるので。
2
+
3
+
4
+
5
+ createElementなどは「要素オブジェクトを生成→DOMに追加」というプロセスであるのに対して、innerHTMLは「対象要素の中身をHTMLテキストの文字列に変換→文字列を書き換え→文字列をDOMに変換→中身を全て新しいDOMで置き換え」となるため、とくにinnerHTMLが大きくなるほど無駄が多いです。最後に要素を追加するだけでもinnerHTML全体が再読み込みされるので。
6
+
7
+ またinnerHTMLを弄るとDOM構造を破壊してしまうことに対してなんの保険もありませんし、script要素はDOMに追加された瞬間に実行されるのでinnerHTMLで書き込むと実行されません。
8
+
9
+
10
+
11
+ 結局の所どれを使えば良いのかですが、jQueryなら$.appendで良いでしょう。ピュアJSならcreateElementか、insertAdjacentHTMLです。
12
+
13
+ ですがinsertAdjacentHTMLでHTMLを要素に変換して挿入した場合、その要素を変数に入れて弄るにはgetElementする必要があるので、すぐに利用したい場合はやはりcreateElementするのが良いでしょう。
14
+
15
+ ちなみにappendChildは子要素を戻り値にとるので次のようにも書けます。
16
+
17
+ ```javascript
18
+
19
+ var li = ul.appendChild(document.createElement('li'));
20
+
21
+ ```
22
+
23
+
24
+
25
+ ---
26
+
27
+ (修正前)
28
+
1
29
  まずそのコードだと動かないです。
2
30
 
3
31
  jqueryなどを使わない場合、基本的にDOMに要素を追加するには、createElementで要素を作ってappendChildする必要があります。とくにscript要素はこれ以外で追加しても実行されません。