0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

そもそもDOMってなに?HTMLの要素をどう取得するの?

Last updated at Posted at 2022-12-22

DOMとは

JavaScriptからHTMLを操作する仕組み。

DOMツリーとは

HTMLの内容をツリー上に表現したもの。
DOMツリー内の各要素のことをノードと呼ぶ。
https://zenn.dev/miumi/articles/2924832e3b3f940f8

WebページのHTMLの情報や要素を確認する

要素の取得

特定のID名を持つノードを指定する

<body>
    <h1>挨拶</h1>
    <div id="main">
        <p>こんにちは</p>
        <p>さようなら</p>
    </div>
</body>
const target = document.getElementById('main');
console.log(target);
//こんにちは
//さようなら

※documentとは
window.documentというWebブラウザーが標準で用意しているオブジェクトwindowの一部。HTMLを操作するためのもの。windowは省略できる。

HTMLタグ名でノードを取得する

<body>
    <h1>挨拶</h1>
    <div id="main">
        <p>こんにちは</p>
        <p>さようなら</p>
    </div>
</body>
const target = document.getElementsByTagName('h1');
console.log(target);
//挨拶

※ID指定ではないのでElements部分が複数指定になっている。
getElementsByClassNameも同様。

親ノードと子ノード

<body>
    <h1>挨拶</h1>
    <div id="main">
        <p>こんにちは</p>
        <p>さようなら</p>
    </div>
</body>
const target = document.getElementById('main');
const fitst = target.firstElementChild;
const last = target.lastElementChild;

console.log(first);
//こんにちは
console.log(last)
//さようなら

formの要素の取得

<body>
    <h1>フォーム要素の取得</h1>

    <form id="form1">
        <input type="text" name="text" placeholder="text">
        <inp0ut type="submit" name="formSubmit" value="submit">
    </form>

<form id="form2">
        <input type="text" name="text" placeholder="text">
        <inp0ut type="submit" name="formSubmit" value="submit">
    </form>
const forms = document.forms;
console.log(forms[0]);
console.log(forms[1]);

セレクターAPI

const targets = document.querySelectorAll('#main > p');
//id = mainの要素の直下のpタグの要素全部取得
const target = document.querySelector('#main > p')
//id = mainの要素の直下のpタグの要素を一個だけ取得

セレクターAPIはdocument.getElementById()に比べて処理が重く、結果が遅くなる傾向。
できるだけdocument.getElementById()を利用する。

DOMの操作

文字列を変える

<body>
    <h1>挨拶</h1>
    <div id="main">
        <p>こんにちは</p>
        <p>さようなら</p>
    </div>
</body>

//pタグの「こんにちは」を「こんばんは」に変えたい場合

const target = document.getElementById('main').firstChild;
console.log(target.textContent);
//こんにちは
target.textContent = 'こんばんは';
console.log(target.textContent);
//こんばんは

CSSのプロパティを変更する

<body>
    <h1>挨拶</h1>
    <div id="main">
        <p>こんにちは</p>
        <p>さようなら</p>
    </div>
</body>
const target = document.getElementById('main'),firstElementChild;

target.style.fondSize = '.5em';
target.style.border = '1px solid';

要素の削除、追加

削除

<body>
    <h1>挨拶</h1>
    <div id="main">
        <p>こんにちは</p>
        <p>さようなら</p>
    </div>
</body>
const target = document.getElementById('main').firstElementChid;
target.parentNode.removeChild(target);
//ターゲットを指定。ターゲットの親要素がremoveChildしている扱いにする。

やっていること:
「削除したい要素」の「親要素」の「子の中」の「削除したい要素」を削除する。

回りくどいがjavaScriptの仕様なので仕方ない。

要素の追加

//要素の作成
const element = document.createElement('p');
element.textContent = 'これは追加された要素です';

//要素の追加
const target = documen.getElementById('main')
target.appendChild(element);

イベント処理

イベントとは
「何かしらのきっかけ = イベント」
・ユーザーがあるボタンを押した時にダイアログを表示する
・あるテキストフォームにフォーカスしたタイミングで動かしたい処理があるとする

<body>
    <h1>挨拶</h1>
    <div id="main">
        <p>こんにちは</p>
        <p>さようなら</p>
    </div>
</body>
const target = document.getElementById('main').firstElementChild;
target.addEventListener('click', () => {
    target.textcontent = 'クリックされました';
});

addEventListenerは第一引数にイベント、第二引数にイベントによって実行される処理を書いた関数を指定する

イベントの伝播

イベントを伝播させたくない場合、

addEventListenerの第二引数に指定する関数を引数に取り、仮にその引数をe(イベントの頭文字)とするならば

e.stopPropagation()

という処理を行うことで伝播をストップさせることができる。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?