JSで単語帳を作ろう(前編)

JavaScript

JSを使って単語帳を作ってみよう。

準備

任意の場所にwordlistフォルダを作成し、その中にjsフォルダと、cssフォルダを作成する。

作成

1.wordlistフォルダの直下にindex.htmlを作成し以下のように記述する。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>単語帳</title>
		<link rel="stylesheet" href="css/main.css">
		<script src="js/main.js"></script>
	</head>
	<body>
		<h1>単語帳</h1>
		<input type="text" placeholder="単語">
		<input type="text"  placeholder="意味">
		<button id="btn">登録</button>
		<p id="total">全0件</p>
		<table id="table"></table>
	</body>
</html>

実行してみよう。以下のように表示されれば成功だ。

main.js作成

入力した内容で表を作成していこう。jsフォルダ内にmain.jsを以下のように作成する。

//厳格モードで実行
'use strict';
//文書が読み込み終わったら処理を実行
window.onload=()=>{
  //Wordクラスの作成
	class Word{
    //コンストラクター
		constructor(en,ja){
			this.en=en;
			this.ja=ja;
		}
    //メソッド
		showInfo(){
			return `<td>${this.en}</td><td>${this.ja}</td>`;
		}
	}
  //input要素をNodeListとして取得
	const inputs=document.querySelectorAll('input');	
  //セレクタをもとに要素を取得
	const btn=document.querySelector('#btn');	
	const total=document.querySelector('#total');	
	const table=document.querySelector('#table');	
  //空の配列を準備
	let list=[];
  //btnにクリックイベントを登録
	btn.addEventListener('click',()=>{
    // 入力値を取得(前後についた無駄なスペースを除去)
    const enValue = inputs[0].value.trim();
    const jaValue = inputs[1].value.trim();

    // 入力が空でないか確認
    if (enValue === '' || jaValue === '') {
      alert('単語と意味を両方入力してください。');
      return; // 入力が不正な場合は処理を中断
    }
    //Wordインスタンスを作成
		let word=new Word(enValue,jaValue);
    //インスタンスを配列に追加
		list.push(word);
    //すべてのinput要素を空欄にする
    inputs.forEach((input)=>{
      input.value='';
    });
		updateTable();
	});
	function updateTable(){
    //見出し行を作成
		table.innerHTML='<tr><th>単語</th><th>意味</th></tr>';
    //配列から1件1件取り出しながら処理を行う(取り出した1件をwordとして扱う)
    list.forEach((word)=>{
      //tr要素を作成
			let tr=document.createElement('tr');
      //trの子要素をhtmlが含まれた文字列で設定
			tr.innerHTML=word.showInfo();
      //table要素の子要素として作成したtr要素を追加
			table.appendChild(tr);
    });
    //total要素のテキストコンテントを設定
    total.textContent=`全${list.length}件`;
	}
	updateTable();
};

実行して、いくつか単語を登録してみよう。以下のように入力した内容が下に表示されれば成功だ。

main.css

テーブルにスタイルを当てよう。cssフォルダの中にmain.cssを作成し以下のように記述する。

/*idにテーブルがついている要素*/
#table{
  /* テーブルの境界線を重ねて表示し、隣接するセルの境界線を1本にまとめる */
	border-collapse:collapse;
}
/*td要素とth要素*/
td,th{
  /*1px実践の罫線(色は#333)*/
	border:1px solid #333;
  /*上下0 左右10pxのパディング*/
	padding:0 10px;
  /*テキストを中央揃えにする */
	text-align:center;
}
th{
  /*背景色を青に設定*/
  background-color:#0000ff;
  /*文字色を白に設定*/
  color:white;
}

[解説]
テーブルにボーダーに引くときにborder-collapseの指定をcollapseにしないと線が2重になってしまう。「collapse」という言葉は「崩壊する」という基本的な意味から、データや要素が「統合されて一つになる」というニュアンスになる。

実行してみよう。テーブルに線が引かれた。
(現状はリロードするとデータが全部消えてしまうので再入力の必要がある)

前編終了

前編はここまでだ。ボタンを押すことで動的に要素を作成できるようになったがリロードすると全て消えてしまう。後編ではこれをブラウザに保存する仕組みを実装していく。

コメント

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