JavaScript querySelector セレクタで要素を取得

目次

querySelector querySelectorとは
querySelectorでvalue値を取得する
引数に変数を指定することも可能
複数セレクタ 複数のセレクタを指定しANDで絞り込む(空白区切り)
1つのクラスにある複数のセレクタを指定する(区切り無し)
querySelectorで取得できているはずなのにnullになる
サンプル labelとinputの間にある文字列を置き換える(childNodes)
querySelectorで背景色と文字の色を変える
  querySelectorで文字列を変える、表示非表示

querySelectorとは

document.querySelector(CSSのセレクタ);

引数にCSSのセレクタを指定し最初にマッチした要素(Elementオブジェクト)を取得します。
一致するものがない場合は、nullを返します。

 

querySelectorでCSSのセレクタを使用する例

以下は、テキストボックスのhtmlのコードです。

<input type="text" id="text1" name="name1" value="red" maxlength="5">

 

cssのid属性で指定する場合→#を指定

「document.querySelector("#text1")」で
「<input type="text" id="text1" name="name1" value="red" maxlength="5">」を取得できます。

 

value値を取得する場合→.valueにする

「document.querySelector("#text1").value」で「red」を取得できます。

 

cssのname属性で指定する場合→[name=]等を指定

「querySelector('[name="name1"]')」や
「querySelector('input[name="name1"]')」や
「querySelector('input[type="text"][name="name1"]')」のように指定できます。

 

querySelectorでvalue値を取得する

<input type="text" id="text1" value="red" maxlength="5" />

<script>
    const qs1 = document.querySelector("#text1").value;
    console.log(qs1); //red
</script>

4行目は、querySelectorで1行目のvalue値を取得しています。

 

引数に変数を指定することも可能

<input type="text" id="text1" value="red" maxlength="5" />

<script>
    let textid = "text1";
    const qs2 = document.querySelector("#" + textid).value;
    console.log(qs2); //red
</script>

4行目は、変数に値をセットしています。
5行目のようにquerySelectorの引数に変数を指定することも可能です。

 

複数のセレクタを指定しANDで絞り込む(空白区切り)

document.querySelectorAll("セレクタ セレクタ");
<div id="div2">
    <p class="p1">red</p>
    <p class="p2">yellow</p>
    <p class="p2">blue</p>
</div>

<script>
    const qs1 = document.querySelector("#div2 .p2");
    console.log(qs1.textContent); //yellow
</script>

セレクタを空白区切りで指定して対象を絞っています。子孫セレクタです。

 

1つのクラスにある複数のセレクタを指定する(区切り無し)

document.querySelectorAll("セレクタセレクタ");
<p><span class="p2">red</span></p>
<p><span class="p2 p3">blue</span></p>

<script>
    const qs2 = document.querySelector(".p2.p3");
    console.log(qs2.textContent); //blue
</script>

セレクタを区切り無しで指定しています。

 

querySelectorで取得できているはずなのにnullになる

querySelectorを実行した時に、取得対象の要素がまだない場合nullになります。
querySelectorの場所をコードの後ろに持ってくる。またはwindow.onloadでページ読み込み後にquerySelectorを実行するようにします。

<input type="text" id="text1" value="red" maxlength="5" />

<script>
    window.onload = function () {
        const qs1 = document.querySelector("#text1").value;
        console.log(qs1); //red
    };
</script>

 

labelとinputの間にある文字列を置き換える(childNodes)

ボタンをクリックすると検索欄の前にある文字列を置き換えます。

 

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

<div class="search1">
    <label>
        ABCDE:
        <input type="search" class="" placeholder="" />
    </label>
</div>
<input type="button" value="click1" onclick="clickBtn11()" />
<input type="button" value="click2" onclick="clickBtn12()" />
<script>
    function clickBtn11() {
        const str1 = document.querySelector(".search1 label").childNodes[0];
        str1.textContent = str1.textContent.replace("ABCDE", "12345");
    }
    function clickBtn12() {
        const str1 = document.querySelector(".search1 label").childNodes[0];
        str1.textContent = str1.textContent.replace("12345", "ABCDE");
    }
</script>

querySelectorとchildNodesで対象を取得してreplaceで文字列を置き換えます。

querySelectorで1行目のクラスと2行目のlabelを指定し、最後にchildNodesで最初の文字列を指定しています。
対象の文字列は、replaceで置き換えています。
chileNodesがないと、文字列と検索欄も置き換わってしまいます。

 

querySelectorで背景色と文字の色を変える

ボタンを押すと文字(value値)が変化し色が変わります。

 

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

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

<script>
  function clickBtn1() {
    const qs1 = document.querySelector("#input1");

    if (qs1.value === "red") {
      qs1.value = "blue";
      qs1.style.background = "#87CEFA";
      qs1.style.color = "red";
    } else {
      qs1.value = "red";
      qs1.style.background = "rgb(250,128,114)";
      qs1.style.color = "blue";
    }
  }
</script>

2行目のボタンを押すと5行目の関数を実行します。
6行目は、querySelectorメソッドで1行目を指定しています。引数は「#input1」でCSSのIDセレクタです。
9行目からは、value値、背景色、文字色を設定しています。

 

querySelectorで文字列を変える、表示非表示

ボタンを押すと2行目の文字列が代わり3行目の文字列が表示と非表示で切り替わります。

red

red

green

 

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

<div id="div2">
    <p id="p2a">red</p>
    <p id="p2b">red</p>
    <p id="p2c">green</p>
</div>
<input type="button" value="click" onclick="clickBtn2()" />

<script>
    function clickBtn2() {
        const qs1 = document.querySelector("#div2 #p2b");
        const qs2 = document.querySelector("#div2 #p2c");

        if (qs1.textContent === "red") {
            qs1.textContent = "blue";
            qs2.style.visibility = "hidden"; //非表示
        } else {
            qs1.textContent = "red";
            qs2.style.visibility = "visible"; //表示
        }
    }
</script>

10,11行目の引数は、セレクタを2つ指定して対象を絞っています。子孫セレクタです。子孫セレクタは、空白区切りにします。
13行目は、textContentで判定しています。
14,17行目は、textContentで文字を設定しています。
15,18行目は、文字列の表示と非表示を設定しています。

関連の記事

JavaScript getElementByIdでIDから値を取得
JavaScript querySelectorAll 複数要素を取得

△上に戻る