📕

JavaScript基礎の基(健忘録)

2023/04/09に公開

⭐️DOMとはJavaScriptの機能ではなくブラウザの機能
 1.Webサーバから受け取ったHTML文章を解析してデータ構造に変換する
 2.DOMにCSSなどを解析してスタイルを紐づけて描写する
1〜2の間にJavaScriptがDOMにアクセスして、内容を書きかえる

◎documentオブジェクト:DOM操作のためのメソッドを持っている
DOM操作のためのメソッド(document. element.で使用)

目的 内容 メソッド 戻り値
検索 idで要素を検索 document.getElementById(id) Element
検索 classで要素を検索 document.getElementsByClassName(name) HTMLCollection
検索 name属性で要素を検索 document.getElementsByName(name) NodeList
検索 HTMLタグ名で要素を検索 document.getElementsByTagName(name) HTMLCollection
検索 セレクターで合致するはじめの要素のみ検索 document.querySelector(selectors) Element
検索 セレクターで複数の要素を検索 document.querySelectorAll(selectors) NodeLis
属性取得 HTMLの属性を取得 element.getAttribute(name) ※属性更新 HTMLの属性を設定(上書き)
属性削除 HTMLの属性を削除 element.removeAttribute(name) -
挿入 最後の子要素として追加 node.appendChild(newElement) -
※挿入 対象要素の直前に挿入 element.insertAdjacentElement(‘beforebegin’, object); -
※挿入 対象要素の内部の最初に挿入 element.insertAdjacentElement(‘afterbegin’, object); -
※挿入 対象要素の内部の最後に挿入 element.insertAdjacentElement(‘beforeend’, object); -
※挿入 対象要素の直後に挿入 element.insertAdjacentElement(‘afterend’, object); -
※挿入 referenceElementの前にnewElementを追加 node.insertBefore(newElement, referenceElement) -
※生成 HTMLタグで要素を作成 document.createElement(name) -
削除 要素を削除 element.remove() -
削除 子要素を削除 element.removeChild() -

const button = document.getElementById('the-button');
const button = document.querySelector('#the-button');
const buttons = document.querySelectorAll('.button');

※DOMの生成
const image = document.createElement('img');
image.setAttribute('src', '/images/cute-cat.png');
image.setAttribute('alt', 'かわいいネコ');

↑↑生成しただけでは特に意味は無く
DOM に挿入することで、画面に反映される↓↓

const element = document.querySelector('#elem-1');
element.insertAdjacentElement('beforebegin', image);

◎あるノードを基点に別ノードを取得(element.でプロパティを使用)

プロパティ 説明 取得できるもの
parentNode 親要素 NodeList(テキストノード+HTMLCollection)
childNodes 子要素 NodeList(テキストノード+HTMLCollection)
children 子要素のリスト HTMLCollectionテキスト×
firstChild 最初の子要素 lastChild
※nextElementSibling 1つ後の要素
※previousElementSibling 1つ前の要素

※コード上の改行やホワイトスペースも、テキストノードの形で DOM の一部に組み込まれるため
nextSibling、previousSiblingでは期待通りに取得できない

◎クラスリストのプロパティ
// クラスを追加する
element.classList.add('is-active');
// クラスを削除する
element.classList.remove('is-active');
// クラスの有無を切り替える
element.classList.toggle('is-active');
// クラスを持っているか?
element.classList.contains('is-active');

※setAttribute などで実装しようとすると、空白区切りの考慮などが必要なため、classListを利用するのが適切

☆イベント
大抵のDOM操作は登録された時点では実行されない。
ブラウザ操作(=イベント)が行われてはじめて実行される。

◎イベントリスナー
addEventListenerメソッドを使用して、要素にイベントを登録するための関数
要素に複数登録することができ、同一のイベントに対して複数の処理を実行することができる
removeEventListenerメソッドを使用して、イベントの登録を解除することができる

【イベントリスナーのタイプ一覧】

タイプ 区分 イベント発生
submit フォーム フォーム送信
reset フォーム フォームリセット
select フォーム テキストの選択
input フォーム 値を入力
load 操作 ページ読み込み完了
scroll 操作 スクロール
click マウス マウスをクリック
dblclick マウス マウスをダブルクリック
mousedown マウス マウス
mouseup マウス マウスボタンを離す
mouseenterマウス マウスが要素に入る
mouseleave マウス マウスが要素を出る
mouseover マウス マウスが要素に入る、子要素から出る
mouseout マウス マウスが要素から出る、子要素に入る
mousemove マウス 要素中でマウスを移動
keypress キーボード キーを押す(日本語、Shift、Alt等未対応)
keydown キーボード キーを押す(日本語、Shift、Alt等対応)
keyup キーボード キーを離す(日本語、Shift、Alt等対応)
focus フォーカス 要素がフォーカスされる
blur フォーカス 要素がフォーカスから外れる

◎イベントハンドラ
HTML要素の属性として指定されるJavaScript関数
onclickなどの属性として使用され、要素には1つのイベントハンドラーしか登録できない
addEventListenerメソッドで登録することはできずremoveEventListenerメソッドは存在しないため、イベントハンドラーを解除する場合は属性の値をnullに設定する必要がある

イベントハンドラ 説明
onBlur ページやフォーム要素からフォーカスが外れた時に発生
onFocus ページやフォーム要素にフォーカスが当たった時に発生
onChange フォーム要素の選択、入力内容が変更された時に発生
onSelect テキストが選択された時に発生
onSelectStart ページ内の要素が選択されようとした時に発生 ※IEのみ
onSubmit フォームを送信しようとした時に発生
onReset フォームがリセットされた時に発生
onAbort 画像の読み込みを中断した時に発生
onError 画像の読み込み中にエラーが発生した時に発生
onLoad ページや画像の読み込みが完了した時に発生
onUnload ウィンドウを閉じた時、他のページに切り替えた時、ページをリロード(更新)した時に発生
onClick 要素やリンクをクリックした時に発生
onDblClick 要素をダブルクリックした時に発生
onKeyUp 押していたキーをあげた時に発生
onKeyDown キーを押した時に発生
onKeyPress キーを押してる時に発生
onMouseOut マウスが離れたした時に発生
onMouseOver マウス乗った時に発生
onMouseUp クリックしたマウスを上げた時に発生
onMouseDown マウスでクリックした時に発生
onMouseMove マウスを動かしている時に発生
onDragDrop マウスでドラッグ&ドロップした時に発生 ※NN4のみ

イベントリスナーを使用する場合:

# 内容 -
第一引数 文字列 =※イベントオブジェクト イベント名 必須
第二引数 関数=functionなど イベントハンドラー 必須
第三引数 真偽 or オブジェクト オプション

HTML:
<button id="myButton">クリックしてください</button>

Javascript:
const myButton = document.querySelector('#myButton'); myButton.addEventListener('click', function() { console.log('ボタンがクリックされました'); });

イベントハンドラーを使用する場合:
function myButtonClick() { console.log('ボタンがクリックされました'); }
<button id="myButton" onclick="myButtonClick()">クリックしてください</button>

【参考】
リンクテキスト
Document
サンプル集

Discussion