スタートページJavascript tips

querySelector (getElementByIdなどの進化形)


基本仕様


querySelector の簡単な例(id)

例1 文字列変数「出力」の内容を「例1表示場所」に表示する

html
  <div id="例1表示場所"></div>
script
  function 例1() {
    var 出力 = "最初の文" + "<br>";
    出力 += "次の行 <a href='aaa/html'>aaa</a>へのリンク";
    document.querySelector('#例1表示場所').innerHTML = 出力;
  }

結果:例1表示場所が次のようになる
  最初の行
  次の行 aaaへのリンク

例2 「例2選択場所」の内容を「例2表示場所」に表示する
(選択場所のタグはそのまま表示)

html
  <div id="例2選択場所">
  最初の行
  次の行 <a href='aaa/html'>aaa</a>へのリンク
  </div>
   :
  <div id="例2表示場所"></div>

script
  function 例2() {
  document.querySelector('#例2表示場所').innerHTML
      = document.querySelector('#例2選択場所').innerHTML;
  }

結果:例2表示場所が次のようになる
  最初の行
  次の行 aaaへのリンク

例3 scriptの「例3選択場所」のソースコードを「例4表示場所」に表示する
(タグの無効化と改行記号の扱いが必要になる)

html
  <div id="例3選択場所"> // ①
  <script>         // ②
  function 例3() {
    var x = 100;
    if (x < 50) var y = 0;
    else y = 1;
  }
  </script>       // ③
  </div>  // ④ ここまでが選択場所 表示では①~④を削除
   :
  <div id="例3表示場所"></div>

script
  function 例3() {
    var 入力文 = document.querySelector('#例3選択場所').innerHTML;
    var 出力文 = "";
    var 行 = [];
    行 = 入力文.split("\n");           // \nによる分離(改行)
    for (var i=2; i<行.length-2; i++) {      // select の間だけを表示(①~④を削除)
      行[i] = 行[i].replace(/</g, "&lt;");    //  < の特殊文字への変換
      行[i] = 行[i].replace(/>/g, "&gt;");   //  >
      行[i] = 行[i].replace(/ /g, "&nbsp;");  //  半角空白
      出力文 += 行[i] + "<br>";        // 改行の復活
    }
    document.querySelector('#例3表示場所').innerHTML = 出力文;
  }

結果:例3表示場所にソースリストが表示される
  function 例3() {
    var x = 100;
    if (x < 50) var y = 0;
    else y = 1;
  }


querySelectorAll の簡単な例(class, タグ名)

複数の要素を取得する場合、querySelectorAll にします。
その結果は、NodeListという配列に似たオブジェクトが返されます。
「例4」①②のように、選択では .innerHTML をつけず、個々の要素に .innerHTML をつけます。

例4 class="aaa" を持つ要素を取り出す

html
  <div class="aaa">class="aaa" の div</div>
  <div class="bbb">class="bbb" の div</div>
  <p class="aaa">class="aaa" の p</p>
   :
  <div id="例4表示場所"></div>

script
  function 例4() {
    var 出力 = "";
    var 入力 = document.querySelectorAll(".aaa");  // ①
    for (var i = 0; i < 入力.length; i++) {
      出力 += 入力[i].innerHTML + "<br>";    // ②
    }
    document.querySelector('#例4表示場所').innerHTML = 出力;
  }

結果:例4表示場所に次の2要素が表示される。
  class="aaa" の div
  class="aaa" の p

例5 li タグの要素を取り出す

html
  <li>li要素</li>
  <li class="red">li要素 class="red"</li>
  <ul>
   <li>ul内部のli要素</li>
  </ul>
  <p>li要素ではない</p>
   :
  <div id="例5表示場所"></div>

script
  function 例5() {
    var 出力 = "";
    var 入力 = document.querySelectorAll("li");
    for (var i = 0; i < 入力.length; i++) {
      出力 += 入力[i].innerHTML + "<br>";
    }
    document.querySelector('#例5表示場所').innerHTML = 出力;
  }

結果:例5表示場所に次の3要素が表示される。
  li要素
  li要素 class="red"
  ul内部のli要素


セレクタの組み合わせ

(A, B) ORの関係: AまたはBに合致

タグ<h3> または タグ<h4> または class="ccc" の要素を取り出す。

html
  <h3>h3</h3>
  <h4 class="xxx">h4 class="xxx"</h4>
  <p class="ccc">p class="ccc"</p>
script
  document.querySelectorAll("h3, h4, .ccc");
結果
  h3
  h4 class="xxx"
  p class="ccc"

(A B) 親・子孫関係:Aの内部のB
(A> B) 親子関係:Aの内部直下のB

html
  <ol>
    <li>① ol⊃ li</li>
    <ul>
      <li>② ol ⊃ ul ⊃ li</li>
    </ul>
  </ol>
  <ul>
    <li>③ ul ⊃ li</li>
    <ol>
      <li>④ ul ⊃ ol ⊃ li</li>
    </ol>
  </ul>

script
  document.querySelectorAll("ol li");
結果
  ①、②、④
script
  document.querySelectorAll("ol > li");
結果
  ①、④

(A[])親子関係:Aの内部で name属性がB

<input type="text" ~> の要素を選択する。
script
  document.querySelectorAll("input[type='text']");

<div id="入力"> 内での<input type="text" ~> の要素を選択する。
script
  document.querySelectorAll("#入力 input[type='text']");

チェックボックス「input type="checkbox"」で name="果物" についてチェックの有無を示す。
HTML
  <input type="checkbox" name="果物" value="ミカン" checked></input>
  <input type="checkbox" name="果物" value="リンゴ"></input>
  <input type="checkbox" name="果物" value="バナナ"></input>

script
  var 要素 = document.querySelectorAll("input[type='checkbox'][name='果物']");
  for (var e of 要素) {
    console.log(e.value, e.checked);
  }

結果:コンソールログの表示
  ミカン true
  リンゴ false
  バナナ false


トピックス

.style.backgroundColor 選択要素に背景色をつける

class="ddd" の要素の背景色を赤にする
HTML
  <p class="ddd">① p class="ddd"</p>
  <div>② div classなし</div>
  <h4 class="ddd">③ h4 class="ddd"</h4>

script
  var 入力 = document.querySelectorAll(".ddd");
  for (var i = 0; i < 入力.length; i++) {
    入力[i].style.backgroundColor = "red";
  }


① p class="ddd"

② div classなし

③ h4 class="ddd"