htmlに
<div id="objId1"></div>
があり これを DOMで
<div>
__<div>
____<div>
______<ul>
________<li></li>
________<li></li>
________<li></li>
________<li></li>
________<li id="objId2"></li>
______</ul>
____</div>
__</div>
</div>
のような htmlを作りたいと考えています。
document.getElementById('objId1').innerHTML = '<div><div><div><ul><li></li><li></li><li></li><li></li><li id="objId2"></li></ul></div></div></div>';
というようにするのは無しで 一つづつDOMで作っていく方法を教えてください。
お手数ですが よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんにちは
要素を生成するには、createElement()
https://developer.mozilla.org/ja/docs/Web/API/Do …
これをDOMに組み入れるのには、appendChild()など
https://developer.mozilla.org/ja/docs/Web/API/No …
を利用なさればよろしいかと。
No.4
- 回答日時:
window.addEventListener('DOMContentLoaded', function(e){
・・・
});
は、HTMLがロードされて描画後に実行されます
一方ご提示の
document.getElementById("objId2").innerHTML = 'Pos2'; // add
については、その外側で実行されているので、その部分が読まれた時点で
実行されているのでPos2のあとにPos1が実行されていることになります
さらに言えば、その時点でobjId2は作成されていないので、
Pos2を設定しようとするとエラーが発生しています。
コンソールで状況を確認すると良いでしょう
No.3
- 回答日時:
こんな感じで
<script>
window.addEventListener('DOMContentLoaded', function(e){
var n0=document.querySelector('#objId1');
var n1=document.createElement('div');
var n2=document.createElement('div');
var n3=document.createElement('div');
var n4=document.createElement('ul');
var n5=document.createElement('li');
var n6=n5.cloneNode();
n6.setAttribute('id','objId2');
n0.appendChild(n1);
n1.appendChild(n2);
n2.appendChild(n3);
n3.appendChild(n4);
n4.appendChild(n5);
n4.appendChild(n5.cloneNode());
n4.appendChild(n5.cloneNode());
n4.appendChild(n5.cloneNode());
n4.appendChild(n6);
});
</script>
<div id="objId1"></div>
回答ありがとうございます。
スマートなソースではありますが、かつ、ベタなのでとてもわかり易いです。
ちょっと、足して確認しました。
すると「Pos1」
が表示されました。
<script>
window.addEventListener('DOMContentLoaded', function(e){
_ _ var n0=document.querySelector('#objId1');
_ _ var n1=document.createElement('div');
_ _ var n2=document.createElement('div');
_ _ var n3=document.createElement('div');
_ _ var n4=document.createElement('ul');
_ _ var n5=document.createElement('li');
_ _ var n6=n5.cloneNode();
_ _ n6.setAttribute('id','objId2');
_ _ n0.appendChild(n1);
_ _ n1.appendChild(n2);
_ _ n2.appendChild(n3);
_ _ n3.appendChild(n4);
_ _ n4.appendChild(n5);
_ _ n4.appendChild(n5.cloneNode());
_ _ n4.appendChild(n5.cloneNode());
_ _ n4.appendChild(n5.cloneNode());
_ _ n4.appendChild(n6);
_ _ console.log(n0); // add
_ _ n6.innerHTML = 'Pos1'; // add
_ _ console.log(n0); // add
_ _ console.log(n6); // add
});
document.getElementById("objId2").innerHTML = 'Pos2'; // add
</script>
<div id="objId1"></div>
No.2
- 回答日時:
DOM をそのまま使うと面倒が多いので、
最近流行の仮想 DOM の様に作ってはいかがでしょうか。
var make = function(vdom){
_ var E = function(n,_){
_ _ var x = (typeof n=='string')? document.createElement(n): n;
_ _ var a = arguments;
_ _ for (var i=1; i<a.length; i++) {
_ _ _ var o = a[i];
_ _ _ if (o instanceof HTMLElement) x.appendChild(o);
_ _ _ else if (o instanceof Array) x.appendChild(E.apply(null,o));
_ _ _ else if (typeof o=='object') for (var i in o) x.setAttribute(i,o[i]);
_ _ _ else x.appendChild(document.createTextNode(o));
_ _ }
_ _ return x;
_ };
_ return E.apply(null, vdom);
};
var elem = make(
_ ['div',
_ _ ['div',
_ _ _ ['div',
_ _ _ _ ['ul',
_ _ _ _ _ ['li','われ','われ'],
_ _ _ _ _ ['li','は'],
_ _ _ _ _ ['li','うちゅ','じん'],
_ _ _ _ _ ['li','で'],
_ _ _ _ _ ['li','ある',{id:'objId2'}]
_ _ _ _ ],
_ _ _ ],
_ _ ],
_ ]
);
document.getElementById('objId1').appendChild(elem);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- HTML・CSS HTMLのdlとul どちらが正しいと思いますか 3 2023/02/23 11:20
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS リストの並べ替え 1 2022/09/13 15:27
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
どの<li><a> が押されたか判別...
-
質問に答えていくと、回答によ...
-
【javascript で動的に a タグ...
-
クリックした<a>タグのみにClas...
-
DOM の 要素の数え方について
-
javascriptでEnterキーをtabキ...
-
固定ナビのJqueryのアコーディ...
-
<ul>から</ul>の間をjavascriptで
-
jQuery タブメニューへのダイ...
-
戻ってきた時ツリーメニューが...
-
C# ブラウザの自動クリック
-
jQueryで、リンクURLの一致を確...
-
【jQuery】遅延実行(タイムラ...
-
JQueryタブのアクティブ アン...
-
チェックボックスに入っている...
-
オンマウスで画像ロールオーバ...
-
文字と数字が混在する要素のsor...
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
javascriptでEnterキーをtabキ...
-
クリックした<a>タグのみにClas...
-
チェックボックスに入っている...
-
【javascript で動的に a タグ...
-
jquery ドロップダウンメニュー...
-
「jQuery」アコーディオンメニ...
-
jQueryで、リンクURLの一致を確...
-
jQueryのeqで最後からn番目以降...
-
ネストされたチェックボックス...
-
javascriptで、クリックしたら...
-
onmouseoverの表示切り替えが上...
-
文字と数字が混在する要素のsor...
-
jQueryでネスト構造の<li>がク...
-
タブメニューを上下に設置
-
<li></li>の数を制限
-
jQuery多層式アコーディオンメ...
-
どの<li><a> が押されたか判別...
-
CSSとJavaScriptを使ってドロッ...
-
複数の画像をランダム(シャッ...
おすすめ情報