JavaScript getElementsByClassName クラスで取得

目次

getElementsByClassNameとは

document.getElementsByClassName(クラスの値);

引数にクラスの値を指定して要素(HTMLCollection)を返します。

get(取得する) + Elements(複数要素) + By + ClassName(クラス名)です。

 

HTMLCollectionのイメージ

HTMLCollectionとは、要素群の集合を表現したインターフェイスです。
配列系のメソッドは使用できません。

似ている他のメソッド

IDを指定する場合、getElementByIdで「HTMLCollection」ではなく「要素」を取得できます。
CSSのセレクタを指定する場合、querySelectorまたはquerySelectorAllで「要素」を取得できます。

 

getElementsByClassNameの使用例

テキストボックスの値(value値)を取得する

<input type="text" class="text1" value="red" />
<input type="text" class="text1" value="blue" />

<script>
    const t1 = document.getElementsByClassName("text1");
    for (let i = 0; i < t1.length; i++) {
        console.log(t1.item(i).value); //red blue
    }
</script>

テキストの値を取得する

<p class="text1">red</p>
<p class="text1">blue</p>
<script>
    const t1 = document.getElementsByClassName("text1");
    for (let i = 0; i < t1.length; i++) {
        console.log(t1.item(i).textContent); //red blue
    }
</script>

テキストの取得は、textContentを使用します。

引数に変数を使用

<input type="text" class="text1" value="red" />
<input type="text" class="text1" value="blue" />

<script>
    let str1 = "text1";
    const t1 = document.getElementsByClassName(str1);
    for (let i = 0; i < t1.length; i++) {
        console.log(t1.item(i).value); //red blue
    }
</script>

引数に変数の指定は可能です。

引数に値を複数指定

<p class="text1">red</p>
<p class="text1 text2">blue</p>
<script>
    const text1 = document.getElementsByClassName("text1 text2");
    for (let i = 0; i < text1.length; i++) {
        console.log(text1.item(i).textContent); //blue
    }
</script>

引数に値を半角スペース区切りで複数指定すると対象を絞ります。

getElementByIdで探す範囲を絞る

<div id="div1">
    <p class="text1">red</p>
    <p class="text1">blue</p>
</div>
<div id="div2">
    <p class="text1">yellow</p>
    <p class="text1">green</p>
</div>
<script>
    const t1 = document.getElementById("div1").getElementsByClassName("text1");
    for (let i = 0; i < t1.length; i++) {
        console.log(t1.item(i).textContent); //red blue
    }
</script>

getElementsByClassNameで探す範囲を絞る

<div class="div1">
    <p class="text1">red</p>
</div>
<div class="div1">
    <p class="text1">blue</p>
</div>
<div class="div2">
    <p class="text1">yellow</p>
</div>
<script>
    const d1 = document.getElementsByClassName("div1");

    const t1 = d1.item(0).getElementsByClassName("text1");
    console.log(t1.item(0).textContent); //red
    const t2 = d1.item(1).getElementsByClassName("text1");
    console.log(t2.item(0).textContent); //blue
</script>

 

テキストボックスの背景色と文字の色を変える

 

上記サンプルのコードです。

<input type="text" value="red" class="class1" maxlength="6" />
<input type="text" value="red" class="class1" maxlength="6" />
<input type="button" value="click" onclick="clickBtn1()" />

<script>
    function clickBtn1() {
        const c1 = document.getElementsByClassName("class1");

        if (c1.item(0).value === "red") {
            for (let i = 0; i < c1.length; i++) {
                c1.item(i).value = "blue";
                c1.item(i).style.background = "#87CEFA";
                c1.item(i).style.color = "red";
            }
        } else {
            for (let i = 0; i < c1.length; i++) {
                c1.item(i).value = "red";
                c1.item(i).style.background = "rgb(250,128,114)";
                c1.item(i).style.color = "blue";
            }
        }
    }
</script>

3行目のボタンを押すと6行目の関数を実行します。
9行目からは、value値、背景色、文字色を設定しています。

 

テキストの文字列を変える

ボタンを押すと文字列が変わります。

red

 

上記サンプルのコードです。

<p class="color2">red</p>
<input type="button" value="click" onclick="clickBtn2()" />
<script>
    function clickBtn2() {
        const c2 = document.getElementsByClassName("color2");
        if (c2.item(0).textContent == "red") {
            c2.item(0).textContent = "blue";
        } else {
            c2.item(0).textContent = "red";
        }
    }
</script>

テキストの文字列を変更する場合、textContentを使用します。

 

テキストの表示非表示+背景色を変える

ボタンを押すと文字列が表示され、再度ボタンを押すと非表示になります。

 

上記サンプルのコードです。

<p class="color3" style="visibility: hidden">red</p>
<p class="color3" style="visibility: hidden">red</p>
<input type="button" value="click" onclick="clickBtn3()" />
<script>
    function clickBtn3() {
        const c3 = document.getElementsByClassName("color3");

        if (c3.item(0).style.visibility == "visible") {
            for (let i = 0; i < c3.item.length + 1; i++) {
                c3.item(i).style.visibility = "hidden"; //非表示
                c3.item(i).style.background = "transparent";
            }
        } else {
            for (let i = 0; i < c3.item.length + 1; i++) {
                c3.item(i).style.visibility = "visible"; //表示
                c3.item(i).style.background = "Khaki";
            }
        }
    }
</script>

3行目のボタンを押すと5行目の関数を実行します。
背景色の透明は11行目のtransparentを使用します。

 

複数のボタンを同じクラス名にして1つの機能を使用する

どちらのボタンを押しても同じ1つの関数を呼出し文字列を変更します。

red

 

上記サンプルのコードです。

<p id="color4">red</p>
<input type="button" value="click1" class="button1" />
<input type="button" value="click2" class="button1" />

<script>
    const btn = document.getElementsByClassName("button1");

    for (var i = 0; i < btn.length; i++) {
        btn[i].onclick = function () {
            clickBtn4();
        };
    }

    function clickBtn4() {
        const c4 = document.getElementById("color4");
        if (c4.textContent === "red") {
            c4.textContent = "blue";
        } else {
            c4.textContent = "red";
        }
    }
</script>

9行目は、取得したクラスと14行目のメソッドをonclickのイベントハンドラで結びつけています。
2行目または3行目のボタンを押すと14行目が実行されます。
14行目以降は、文字を入れ替えるロジックです。

 

引数で呼び出した場所を区別

関数は一つで、ボタンを押した箇所のみ処理を行います。

red

red

blue

blue

 

上記サンプルのコードです。

<p class="color5">red</p>
<p class="color5">red</p>
<input type="button" value="change" onclick="clickBtn(5)" />
<p class="color6">blue</p>
<p class="color6">blue</p>
<input type="button" value="change" onclick="clickBtn(6)" />
<script>
    function clickBtn(num) {
        const cx = document.getElementsByClassName("color" + num);

        for (let i = 0; i < cx.length; i++) {
            if (cx.item(i).textContent == "red") {
                cx.item(i).textContent = "blue";
            } else {
                cx.item(i).textContent = "red";
            }
        }
    }
</script>

固定文字と変数(引数)の値でclassの値を動的に作成します。

関連の記事

JavaScript getElementByIdでIDから値を取得
JavaScript 属性値を取得/設定/削除する(getAttribute)

△上に戻る