JSによって動的に要素を作成し追加できる。さっそくやってみよう。
[実行例]
ボタンがある。

押すと要素が追加される。

押すたびに要素が追加されていく。

[作例]
web11フォルダを作成しその中にlesson1.htmlを以下のように作成する。
●lesson1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<button id="btn">追加</button>
<ol id="list"></ol>
<script>
const ol=document.getElementById("list");
const btn=document.getElementById("btn");
let count=0;
btn.addEventListener("click",()=>{
const li = document.createElement("li");
li.textContent="Item"+(++count);
ol.appendChild(li);
});
</script>
</body>
</html>
[解説]
document.createElement(‘li’)でli要素を作成し、親要素がappendChildでその要素を追加している。
DOMの操作が以下のサイトによくまとまっている。参考にすること。
[やってみよう]
以下のlesson2.htmlを利用し、九九の表を作成せよ。(idがtableのテーブルタグに要素を追加して作成すること)

●lesson2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>jsレッスン</title>
</head>
<body>
<table id="table" border="1"></table>
<script>
window.onload=function(){
~ここに記述する~
};
</script>
</body>
</html>
[解答例]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>jsレッスン</title>
</head>
<body>
<table id="table" border="1"></table>
<script>
window.onload=function(){
var table=document.getElementById('table');
for(var i=1;i<=9;i++){
var tr=document.createElement('tr');
for(var j=1;j<=9;j++){
var td=document.createElement('td');
td.textContent=i+'*'+j+'='+(i*j);
tr.appendChild(td);
}
table.appendChild(tr);
}
};
</script>
</body>
</html>
●演習問題
以下のような九九練習アプリを作成してみよう。
実行すると九九の表が表示される。

項目をクリックするとダイアログで問題と入力欄が表示される

正しい答えを入力すると緑で着色される。(間違えはピンク)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<table id="table" border="1"></table>
<script>
window.onload=function(){
const table=document.getElementById("table");
for(let i=1;i<=9;i++){
const tr=document.createElement("tr");
for(let j=1;j<=9;j++){
const td= document.createElement("td");
td.textContent=`${i}x${j}=`;
td.x=i;
td.y=j;
td.ans=i*j;
td.addEventListener("mouseenter",function(){
this.style.textDecoration="underline";
});
td.addEventListener("mouseleave",function(){
this.style.textDecoration="none";
});
td.addEventListener("click",function(){
const userAns=window.prompt(`${this.x}x${this.y}=`);
if(this.ans === parseInt(userAns)){
this.style.backgroundColor="lightgreen";
//this.textContent+=this.ans;
}else{
this.style.backgroundColor="pink";
}
});
tr.appendChild(td);
}
table.appendChild(tr);
}
};
</script>
</body>
</html>

コメント