Open1

🟣【DOM】 3.4 要素のプロパティを取得,設定する【(<input>要素)の値をgetAttribute メソッド,valueプロパティで取得】【属性を、属性/プロパティ双方の形式で取得】

naonao

要素は、ほとんどの属性について同名のプロパティを用意しています。たとえばアンカータグのhref属性を取得/設定するために、getAttribute / setAttribute メソッドの代わりに、以下のように表しても構いません(変数linkはアンカータグを表すものとします)。

let url = link.href;//取得
link.href = 'https://wings.msn.to/'; // 設定

ただし、厳密には属性とプロパティとは別ものです。特に、以下に述べるような状況では、双方を明確に使い分ける必要があります。

■入力要素の現在値を取得/設定する
たとえば以下は、テキストボックス(<input>要素)の値をgetAttribute メソッド、valueプロバティ
それぞれで取得する例です。

    <form>
      <div>
        <label for="name">氏名:</label>
        <input id="name" type="text" name="name" value="匿名" />
      </div>
      <input id="btn" type="button" value="送信" />
    </form>
let member = document.querySelector("#name");
document.querySelector("#btn").addEventListener(
  "click", //type,イベントの種類
  function () { //listener, イベントの発生時に実行するコード
    console.log(member.value); //結果:佐藤理央(クリック時の入力値)
    console.log(member.getAttribute("value")); //結果:匿名(初期値)
  },
  false //opts,イベントオプション(falseで標準の動作)
);

valueプロパティが現在の値を返すのに対して、getAttributeメソッドは初期値を返す。ユーザーからの入力値を取得するにはvalueプロパティを利用します。
この例題の場合で、入力値を知りたかったら、 console.log(member.value)を利用するという事。

■ ブール属性では値の扱いが異なる
プール属性とは、disabled / selected/checked/muttipleなどに代表される、値のいらない風性のこと。属性名の有無でオンオフの意味があるので、以下のように状況次第で記述が変化する場合が
あります。
• disabled="disabled"(属性名と等しい値)
• disabled=""(属性値は空)
• disabled(属性値を省略)

以下は、それぞれの書き方で表された属性を、属性/プロパティ双方の形式で取得する例です。

    <form>
      <div>
        <label for="name">氏名: </label>
        <input id="name" type="text" name="name" disabled="disabled" />
      </div>
      <div>
        <label for="title">質問タイトル:</label>
        <input id="title" type="text" name="title" disabled="" />
      </div>
      <div>
        <label for="comment">質問内容:</label>
        <input id="comment" type="text" name="comment" disabled />
      </div>
      <input id="btn" type="button" value="送信" />
    </form>
  </body>
let els = document.querySelectorAll('input[type="text"]');
//HTML文書内の要素を指定するためのルールを記述したCSSセレクタ。
//特定の条件を満たす要素を取得するためのもの。
for (let el of els) {
  console.log(`${el.name}= ${el.disabled} / ${el.getAttribute("disabled")}`);
}
//name= true / disabled
//title= true / 
//comment= true / 

getAtribute メソッドはマークアップ上で特定された値を返すのに決して、disabedプロパティは等しくtrue/falseとして返すわけです。コードでは、値が一覧しており、ブール値として受け渡してきるdisabledプロパティのほうが扱いやすく、また、優先して利用すべきです。

JS各行の意味
let els = document.querySelectorAll('input[type="text"]');:

すべてのテキスト入力フィールド (input[type="text"]) を選択し、els という変数に保存します。
for (let el of els) { ... }:

すべてのテキスト入力フィールドに対してループを実行します。
console.log(${el.name}= ${el.disabled} / ${el.getAttribute("disabled")});:

各入力フィールドの name 属性の値 (el.name)、disabled プロパティの値 (el.disabled)、および disabled 属性の値 (el.getAttribute("disabled")) をコンソールに出力します。