Webサイト制作-11日目(createElement)

JavaScript

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の操作が以下のサイトによくまとまっている。参考にすること。

ライブラリを使わない素のJavaScriptで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>

コメント

タイトルとURLをコピーしました