課題【練習問題(DOM操作/イベント操作)】ーNo.002
課題内容
- <概要>
- 文字を表示するタグ(labelタグ)を2つ準備しましょう。
- 初期表示として、
- 「直近1つ目:」「直近2つ目:」
- とそれぞれ表示しましょう。
- 1つ目:「りんごに変更」という文字のボタン。
- 2つ目:「バナナに変更」という文字のボタン。
- 3つ目:「みかんに変更」という文字のボタン。
- この3つのボタンを用意して、
- それぞれのボタンが押された時に、
- labelの文字を書き換えてみましょう。
- ボタンが押された時の変更は、
- 1つ目が押された:最新(直近1つ目)を「りんご」に変更」
- 2つ目が押された:最新(直近1つ目)を「バナナ」に変更」
- 3つ目が押された:最新(直近1つ目)を「みかん」に変更」
- という変更をしてみましょう。
- ボタンが押されて最新の文字列を変更する時に、
- 先に直近1つ目の文字列を直近2つ目に移動しましょう。
- また、それぞれのボタンで文字を変更した時に、
- コンソールにも、
- 「最新の文字をXXに変更しました」
- (XXはりんご、バナナ、みかんのどれか)
- という表示を行いましょう。
出力結果
初期表示として、
このような表示になるように、
HTMLで表示を作りましょう。
ボタンを押した時の表示の変更は、
以下のようになります。
ボタンを押した時
このボタンが押された時は、
例えば、
最初に「りんご」が選択されたときは、
このように表示され、
次に、「みかん」が選択されたときは、
このように、
直近の1つ目と2つ目が変更されます。
実際の動きを確認(サンプルの動き)
サンプルの動きとして、
ポイント(文字列の置換)
文字列を取得したり、置換するには、
DOM操作の中でも、
「textContent」
を使うことで、文字列を操作することができます。
この「textContent」に関しては、以下を参考にしてください。
答え
HTML
<html>
<head>
<meta charset="UTF-8">
<title>Sample Dom/Event</title>
</head>
<body>
<div>
<label class="text-first">直近1つ目:</label>
<label class="text-second">直近2つ目:</label>
</div>
<div>
<button id="change-text1">りんごに変更</button>
<button id="change-text2">バナナに変更</button>
<button id="change-text3">みかんに変更</button>
</div>
</body>
<script type="text/javascript" src="sample.js"></script>
</html>
javaScript
let sampleFirst = document.querySelector('.text-first');
let sampleSecond = document.querySelector('.text-second');
let sampleButton1 = document.querySelector('#change-text1');
let sampleButton2 = document.querySelector('#change-text2');
let sampleButton3 = document.querySelector('#change-text3');
const baseTextFirst = '直近1つ目;';
const baseTextSecond = '直近2つ目;';
let firstText = '';
let secondText = '';
sampleButton1.addEventListener('click',event => {
moveFirstToSecond('りんご');
})
sampleButton2.addEventListener('click',event => {
moveFirstToSecond('バナナ');
})
sampleButton3.addEventListener('click',event => {
moveFirstToSecond('みかん');
})
function moveFirstToSecond(setFirstText) {
// 2つ目の値を1つ目の値で上書き
secondText = firstText;
// 1つ目の値を最新に書き換え
firstText = setFirstText;
// 1つ目のラベルに表示
sampleFirst.textContent = baseTextFirst + firstText;
// 2つ目のラベルに表示
sampleSecond.textContent = baseTextSecond + secondText;
// コンソールに表示
console.log('最新の文字を'+setFirstText+'に変更しました');
}