●JavaScriptでHTMLタグを取得する方法
JavaScriptでWebサイトを動的に操作する際に欠かせないのが、HTMLタグの取得です。
今回は、そんなJavaScriptでHTMLタグを取得する方法を、初心者の方にもわかりやすく解説していきたいと思います。
HTMLタグを取得する方法はいくつかありますが、代表的なのが次の3つです。
- document.getElementByIdを使う方法
- document.getElementsByClassNameを使う方法
- document.getElementsByTagNameを使う方法
それでは、1つずつ見ていきましょう。
○document.getElementByIdの使い方
document.getElementByIdは、指定したIDを持つ要素を取得するメソッドです。
IDはHTMLタグに付与される固有の識別子で、1つのHTML内で重複しないのが特徴です。
例えば、以下のようなHTMLがあったとします。
この場合、JavaScriptで以下のようにすることで、id=”myDiv”の要素を取得できます。
実行結果は次のようになります。
このように、document.getElementByIdを使えば、IDを指定するだけで簡単にタグを取得できるのです。
○document.getElementsByClassNameの使い方
次に、document.getElementsByClassNameの使い方について解説します。
こちらはクラス名を指定して要素を取得するメソッドです。
クラスはIDと違い、複数の要素に同じクラス名を付けることができます。
次のようなHTMLを例に考えてみましょう。
ここで、JavaScriptから以下のようにクラス名を指定すると、
実行結果は次のようになります。
document.getElementsByClassNameの戻り値はHTMLCollectionというオブジェクトで、該当する全ての要素が含まれています。
個々の要素にアクセスするには、通常の配列のようにインデックスを指定します。
このように、document.getElementsByClassNameを使えば、クラス名を指定して複数の要素をまとめて取得できるわけです。
○document.getElementsByTagNameの使い方
最後に、document.getElementsByTagNameの使い方を見ていきましょう。
こちらはタグ名そのものを指定して要素を取得するメソッドです。
次のようなHTMLを例に考えてみます。
ここで、JavaScriptから以下のようにpタグを指定すると、
実行結果は次のようになります。
document.getElementsByTagNameも、getElementsByClassNameと同様に、HTMLCollectionを返します。
個々の要素は配列のようにインデックスを指定してアクセスできます。
このように、document.getElementsByTagNameを使えば、タグ名を指定するだけで該当する全ての要素を取得できるのです。
○サンプルコード1:IDでタグを取得
それでは、実際のサンプルコードを見ていきましょう。
まずは、IDを使ってタグを取得する例です。
実行結果
document.getElementByIdで取得した要素の内容にアクセスするには、innerHTMLプロパティを使います。
これで、タグの中身を文字列として取得できます。
○サンプルコード2:クラスでタグを取得
次に、クラスを使ってタグを取得する例を見てみましょう。
実行結果
document.getElementsByClassNameで取得した要素は複数になることが多いので、for文を使って1つずつ処理をするのが一般的です。
○サンプルコード3:タグ名でタグを取得
最後に、タグ名を使ってタグを取得する例です。
実行結果
この例では、textContentプロパティを使ってタグ内のテキスト部分のみを取得しています。
タグも含めて全て取得したい場合は、innerHTMLプロパティを使います。
●タグの属性を操作する方法
JavaScriptでHTMLを操作する際に、タグの取得だけでなく属性の操作も重要なスキルの1つです。
属性とは、タグに付加される追加情報のことで、id属性やclass属性、src属性などがあります。
これらの属性を動的に変更することで、よりインタラクティブなWebサイトを作ることができるのです。
属性の操作には主に3つの方法があります。
getAttributeメソッドで属性値を取得したり、setAttributeメソッドで属性値を設定したり、removeAttributeメソッドで属性自体を削除したりできます。
こを使い分けることで、さまざまな要望に応えられるでしょう。
それでは、サンプルコードを交えながら、属性操作の方法を具体的に見ていきましょう。
○サンプルコード4:getAttribute/setAttributeでタグの属性値を取得・設定
まずは、getAttributeとsetAttributeを使った属性の取得と設定の例です。
このサンプルコードでは、まずgetAttributeメソッドを使ってimg要素のsrc属性とalt属性の初期値を取得し、コンソールに表示しています。
次に、changeBtn要素にクリックイベントを設定し、クリックされたらsetAttributeメソッドを使ってsrc属性とalt属性の値を変更しています。
実行結果は次のようになります。
ボタンをクリックすると、img要素のsrc属性がimage2.jpgに、alt属性が画像2に変更されます。
このように、getAttributeとsetAttributeを使えば、属性値を自由に取得・設定できるわけです。
ただし、注意点もあります。
たとえば、setAttributeで存在しない属性を設定しようとすると、新しい属性が追加されてしまいます。
本来の属性名と異なるものを指定しないよう、気をつける必要があるでしょう。
○サンプルコード5:removeAttributeでタグの属性を削除
次に、removeAttributeメソッドを使って属性を削除する例を見てみましょう。
ここでは、pタグにhighlightというクラスが付いています。
これを、removeClassボタンをクリックすることで削除しています。
removeAttributeメソッドに属性名を指定すれば、その属性ごと削除されます。
これによって、元々ついていたスタイルやデータなども一緒に削除できるので便利です。
実行前のマークアップ
ボタンクリック後のマークアップ
このように、不要になった属性を削除することで、よりクリーンなマークアップを保つことができます。
なお、存在しない属性をremoveAttributeで削除しようとしてもエラーにはなりません。ただ、何も起こらないだけです。
削除対象の属性がちゃんと存在するかどうかは、事前に確認しておくとよいでしょう。
●CSSスタイルを操作する方法
JavaScriptでHTMLを操作するスキルを身につけたら、次はCSSスタイルの操作にチャレンジしてみましょう。
HTMLタグの見た目を動的に変更できれば、よりリッチでインタラクティブなWebサイトを作ることができます。
CSSスタイルを操作するには、主に2つの方法があります。1つは、style属性を使ってインラインスタイルを直接変更する方法。
そしてもう1つは、getComputedStyleメソッドを使って、適用されているスタイルを取得する方法です。
状況に応じて使い分けることが大切ですね。
それでは、サンプルコードを見ながら、それぞれの方法を詳しく解説していきたいと思います。
○サンプルコード6:style属性を使ってタグのスタイルを変更
まずは、style属性を使ってインラインスタイルを変更する方法から見ていきましょう。
このサンプルコードでは、最初は普通のパラグラフが表示されています。
それがchangeColorボタンをクリックすると、背景色が黄色に、フォントが太字に、そしてstrong要素の文字色が赤色に変わります。
実行前のスタイル
ボタンクリック後のスタイル
style属性は、そのタグに直接スタイルを指定するための属性です。
JavaScriptからは、要素のstyle
プロパティを通じてアクセスできます。
style.プロパティ名 = '値'
という形で、個別のCSSプロパティを設定できるわけですね。
ただし、この方法で変更できるのはインラインスタイル、つまりそのタグにだけ適用されるスタイルだけです。
外部CSSファイルや<style>
タグで指定された「一般的な」スタイルは変更できないので注意が必要です。
全体的なレイアウトを変更するようなケースでは、クラス名を切り替える方が適しているかもしれません。
その場合は、先ほど学んだclassNameプロパティを使うとよいでしょう。
○サンプルコード7:getComputedStyleで適用されたスタイルを取得
次は、getComputedStyleメソッドを使って、実際に適用されているスタイルを取得する方法を見ていきます。
ここでは、外部CSSでスタイルが設定された段落要素に対して、getComputedStyleメソッドを使って、そのスタイルを取得しています。
getComputedStyleは、要素に実際に適用されている最終的なスタイル情報を、CSSStyleDeclarationオブジェクトという形で返してくれます。
これを使えば、その要素の幅や高さ、色などを知ることができます。
注目してほしいのが、CSSで設定した値がそのまま返ってくるわけではないということです。
たとえば、背景色はlightblueと指定しましたが、取得された値はrgb(173, 216, 230)というRGB形式になっています。ブラウザが計算した最終的な値が返されるということですね。
JavaScriptからスタイルを操作するときは、この計算済みの値をそのまま使うのがおすすめです。
そうすれば、予期せぬ見た目の違いが起こりにくくなります。
ただし、疑似要素(::before, ::afterなど)のスタイルは取得できないので、ご注意ください。
疑似要素はHTMLのツリー構造に存在しないため、getComputedStyleの対象にはならないのです。
●よくあるエラーと対処法
JavaScriptを使ってHTMLを操作していると、思わぬエラーに遭遇することがあります。
特に初心者の方は、エラーメッセージを見ても何が原因なのかわからず、戸惑ってしまうかもしれません。
ただ、エラーは誰にでも起こりうるもので、それを乗り越えていくことがスキルアップにつながります。
ここでは、よくあるエラーとその対処法を3つ紹介しますので、ぜひ参考にしてみてください。
○「nullが返ってくる」エラーの原因と対処
JavaScriptでHTMLタグを取得しようとしたときに、nullが返ってくるエラーに遭遇したことはありませんか?
これは、指定したIDやクラス名、タグ名の要素が見つからなかったときに起こります。
例えば、次のようなコードがあったとします。
ここでは、id=”myP”の要素を取得しようとしていますが、実際にはそのようなIDの要素は存在しません。
そのため、myPにはnullが代入され、コンソールにもnullが出力されています。
このエラーを防ぐには、IDやクラス名、タグ名を正しく指定することが大切です。
タイポがないか、大文字小文字は合っているか、よく確認しましょう。
また、JavaScriptを書くタイミングにも気をつけてください。
HTMLの読み込みが完了する前にJavaScriptが実行されると、タグが見つからずnullになってしまいます。
HTMLの最後、</body>
タグの直前にJavaScriptを書くか、<script>
タグにdeferという属性を付けるとよいでしょう。
○「タグが見つからない」エラーの原因と対処
「nullが返ってくる」エラーと似ていますが、「タグが見つからない」エラーも起こりがちです。
これは、指定したセレクターに該当するタグが存在しない場合に発生します。
次のようなHTMLがあるとします。
ここで、<ul>
タグ内の<p>
タグを取得しようとすると…
<ul>
タグの中に<p>
タグは存在しないため、myPはundefinedになります。
そして、undefinedに対してgetElementsByTagNameを使おうとしているので、エラーが発生するのです。
このエラーを防ぐには、セレクターを正しく指定することに加えて、取得した要素がundefinedやnullではないかチェックする習慣を付けましょう。
このように、条件分岐を使って、エラーが起こりそうな状況を事前に回避するのが賢明です。
○「属性が設定できない」エラーの原因と対処
最後に、タグの属性を操作しようとしたときに起こるエラーを見ていきます。
これは、属性名を間違えたり、属性の値を正しく指定しなかったりすると発生します。
例として、次のようなHTMLとJavaScriptを考えてみましょう。
ここでは、img要素のalt属性とwidth属性を設定しようとしています。
しかし、width属性には単位のない数値300を指定しているため、エラーが発生しています。
このエラーを解決するには、属性の値を正しい形式で指定する必要があります。
width属性なら、単位を付けて’300px’などとします。
また、存在しない属性を設定しようとしてもエラーになるので注意が必要です。
imgタグにはheight2属性などは存在しません。属性名を間違えていないか、今一度確認しましょう。
●JavaScriptとHTMLの連携Tips
これまで、JavaScriptでHTMLを操作する基本的な方法を学んできました。
タグの取得や属性の操作、スタイルの変更など、かなりダイナミックにWebページを動かせるようになったのではないでしょうか。
でも、本当に実践的なWebサイトを作るには、もう少し踏み込んだテクニックが必要です。
ここでは、JavaScriptとHTMLをもっとスムーズに連携させるための Tips を3つ紹介したいと思います。
実務でJavaScriptを使うシーンが増えてきた中級者の方にも、きっと役立つ内容だと思いますので、ぜひトライしてみてください。
○サンプルコード8:data属性を活用する例
1つ目のTipsは、data属性の活用です。
data属性とは、HTMLのタグに独自のデータを埋め込むための属性で、data-
で始まる属性名を自由につけられます。
例えば、商品リストのHTMLを次のように記述したとします。
ここでは、各<li>
タグにdata-idとdata-priceという属性を付けて、商品IDと価格のデータを持たせています。
このデータをJavaScriptで取得するには、datasetプロパティを使います。
こんな風に、HTMLにデータを持たせておけば、JavaScriptからそのデータを簡単に利用できます。
特に、Webアプリケーションでは、データの受け渡しにdata属性がよく使われます。
data属性を活用することで、HTMLとJavaScriptのコードがすっきり分離でき、より保守性の高いプログラムを書けるでしょう。
ぜひ覚えておいてください。
○サンプルコード9:DOMContentLoadedイベントでDOMの構築を待つ
2つ目のTipsは、DOMContentLoadedイベントの利用です。
JavaScriptからHTMLを操作するとき、HTMLのDOMツリーが完成していないと、思わぬエラーが起きることがあります。
そんなときは、DOMの構築が終わるのを待ってからJavaScriptを実行すればOKです。
それを実現するのがDOMContentLoadedイベントです。
このサンプルコードでは、DOMContentLoadedイベントのリスナーを登録しています。
これにより、DOMの構築が完了した後に、初めて中の処理が実行されます。
もし、DOMContentLoadedイベントを使わずに次のように書くと、エラーになってしまうかもしれません。
なぜなら、JavaScriptの実行時点では、まだ<h1 id="title">
タグが読み込まれていない可能性があるからです。
DOMContentLoadedイベントを使えば、そういったタイミングのズレを防げます。
特に、<head>
タグ内や<body>
タグの先頭でJavaScriptを読み込む場合は、必須のテクニックだと覚えておきましょう。
○サンプルコード10:フォームの入力値を取得・設定する
最後は、フォームの入力値を操作する方法です。
Webサイトでは、フォームを使ってユーザーからデータを受け取るシーンが多々あります。
そのデータを検証したり、別の場所に表示したりするのに、JavaScriptが役立ちます。
次のようなフォームがあるとしましょう。
ここから、JavaScriptを使って入力値を取得し、別の場所に表示してみます。
input要素の現在の値を取得するには、valueプロパティを使います。
一方、値を設定するときも、input.value = '新しい値'
という具合に、valueプロパティを使います。
ボタンをクリックすると、入力されている名前を取得し、あいさつ文とともに<p id="nameOutput">
に表示します。
フォームを扱う際の注意点は、実際に送信されるまでは、input要素のvalueプロパティが最新の値だということです。
ですから、送信ボタンのclickイベントをリッスンするのではなく、formのsubmitイベントをリッスンする方が望ましいでしょう。
この例では、submitイベントのデフォルトの動作をpreventDefault()で中止することで、フォームの送信を止めています。
そして、送信時の入力値を使って、あいさつ文を表示しているわけです。
まとめ
JavaScriptを使ったHTMLの操作は、Webサイトをインタラクティブにする上で欠かせないスキルです。
タグの取得や属性の操作、スタイルの変更など、基本的なテクニックを身につけることで、より動的で魅力的なWebサイトを作れるようになります。
エラー対処やHTMLとの連携Tips など、実践的なノウハウも押さえておくと、さらに応用の幅が広がるでしょう。
今回の記事で紹介したサンプルコードを参考に、ぜひ自分でもJavaScriptとHTMLを組み合わせて、オリジナルのWebサイトを作ってみてください。
最初は難しく感じるかもしれませんが、失敗を恐れずにチャレンジすることが大切です。
JavaScriptの学習を通じて、プログラミングの楽しさや可能性を体感していってください。
みなさんの活躍を心から応援しています!