DOM操作における要素取得について
Javascriptを扱ううえで最も基本の操作ともいえるHTMLの要素取得のメソッド
getElementById()
querySelector()
この2つのメソッドを学習した際に思ったこと、
querySelector()だけで良いのではないか?
これについて、現時点での理解を書いてみます。
getElementByIdメソッド
HTMLの中で、指定したid属性が一致するelementオブジェクトを取得するメソッド。HTMLの中で、idは一つしか指定できないので、idが指定されているタグの要素取得には、このメソッドを使えばよい。
<html>
<head>
<title>example1</title>
</head>
<body>
<p id="id">IDの要素取得</p>
<script>
const ex = document.getElementById("id");
console.log(ex);
<!-- 出力結果 → IDの要素取得 -->
</script>
</body>
</html>
querySelectorメソッド
HTMLの中で、指定したセレクターが一致するelementオブジェクトを取得するメソッド。指定するセレクターは、id属性でもclass属性でもよい。
引数の値には、idなら '#' を、 classなら'. 'をつけて指定する。
<html>
<head>
<title>example2</title>
</head>
<body>
<p id="id">IDの要素取得</p>
<p class="class">Classの要素取得</p>
<script>
const ex1 = document.querySelector("#id");
const ex2 = document.querySelector(".class");
console.log(ex1);
<!-- 出力結果 → IDの要素取得 -->
console.log(ex2);
<!-- 出力結果 → Classの要素取得 -->
</script>
</body>
</html><html>
どちらを使えばよいか
動作に関しては、どちらを用いても問題はなさそうです。なのでどちらを使ってもよさそう、というのが自分の現時点での理解になります。
ただ、何も考えずquerySelectorのみを使うのは、良くなさそうな雰囲気がするので、以下の点を踏まえて使い分けることにしました。
読み込みの速さ
本当にわずかな差ではあるみたいですが、querySelectorよりgetElementByIdのほうが読み込みが速いようです。単純に考えても、getElementByIdのほうが、一つのプロパティ(id)にのみ対応するメソッドなのでイメージしやすいかなと思います。
ただ速いといっても本当にごくわずか差なので、普通に使用するくらいでは(大規模開発等でない限り)では、全く気にならない程度の差であるようです。
querySelectorの注意
querySelectorはid要素、class要素どちらでも要素を取得できるが、class要素を取得する際は一番初めの要素のみ取得するので、全てのclass属性の要素を取得する場合,querySelectorAll を使用する。
また、querySelectorはCSSセレクターで要素を取得するので、CSSセレクターを指定できない場合は、要素の取得に工夫が必要です。
まとめ
querySelectorは汎用性が高いので便利であるが、id要素の取得はなるべく、getElementByIdメソッドを使うようにしています。ただ、画面の動作の違いはないため、どちらを使っても問題はなさそうです。
実際に大きな開発等ではどのように使い分けられているのか、何かの機会があったら開発者に聞いてみたいものです。