今回は、「ノード」について、少し深く見ていきます。
ノードを理解することにより、より一層「DOM」の理解が深まると思います。
nodeType
「nodeType」プロパティを使用すると、ノードのタイプを確認することが出来ます。
HTML
<body>
<header>
<h1 id="sample">getElementByIdを取得する</h1>
</header>
<section id="sector1">
<h2 id="fruits">果物</h2>
<p>ばなな</p>
<p>りんご</p>
<p>ぶどう</p>
<p>オレンジ</p>
<p>いちご</p>
</section>
<section id="sector2">
<h2>動物</h2>
<ul>
<li>犬</li>
<li>猫</li>
<li>鳥</li>
<li>パンダ</li>
</ul>
</section>
<script type="text/javascript" src="main.js"></script>
</body>
let element = document.getElementById("sector1");
console.log(element.nodeType);
1
「sector1」は「1」と返されています。
全部で12個の値を返すのですが、代表的なものを抑えておけば良いでしょう。
- 要素ノード:1
- テキストノード:3
- ドキュメントオブジェクト:9
更に詳しく知りたい方は以下のサイトをご参照ください。
nodeName
「nodeName」プロパティを使用すると、ノードの名前を取得出来ます。
console.log(element.nodeName); SECTION
返される名前は、ノードの種類によって違います。
似たようなプロパティに、「tagName」があります。
対象が要素ノードの場合は、どちらを使っても同じ名前が返されます。
対象が要素ノードでない場合は、「nodeName」しか使うことが出来ません。
子要素ノードなど色んな書き方で取得することが出来ます。
for (let i = 0; i < element.children.length; i++) {
console.log(element.children.item(i).tagName);
}
H2
5 P
nodeValue
「nodeValue」プロパティを使うと、ノードの値を取得する事ができます。
let section1 = document.getElementsByTagName("p");
for (let i = 0; i < section1.length; i++) {
console.log(section1.item(i).firstChild.nodeValue);
}
ばなな
りんご
ぶどう
オレンジ
いちご
Pタグのノードをすべて取得して、最初の子ノードであるそれぞれのテキストノードを取得しています。
なお、「nodeValue」とほぼ同じ値を取得するものとして、「data」があります。
for (let i = 0; i < section1.length; i++) {
console.log(section1.item(i).firstChild.data);
}
特にこだわりがなければ、「data」を使うほうが良いでしょう。
textContent
「textContent」プロパティを使用すると、要素内のテキストのみを取得することが出来ます。
console.log(document.body.textContent);
getElementByIdを取得する
果物
ばなな
りんご
ぶどう
オレンジ
いちご
動物
犬
猫
鳥
パンダ
コンソールの表示を見て頂くと分かると思いますが、すべてのタグが切り取られたような感じで表示されます。
let newFruits = document.getElementById("fruits");
newFruits.textContent = "Fruits";
「textContent」を使って、新しいテキストを設定することが出来ます。

「果物」を「Fruits」に変更してみました。
innerText と innerHTML
使い方
「innerText」プロパティは、要素のテキストを取得します。
「innerHTML」プロパティは、要素のHMTL文を取得します。
let element = document.getElementById("sector1");
console.log(element.innerText);
Fruits
ばなな
りんご
ぶどう
オレンジ
いちご
console.log(element.innerHTML);
<h2 id="fruits">Fruits</h2>
<p>ばなな</p>
<p>りんご</p>
<p>ぶどう</p>
<p>オレンジ</p>
<p>いちご</p>
「innerText」はテキストを、「innerHTML」はHTML文を取得しているのが分かると思います。
書き換え
let newFruits = document.getElementById("fruits");
newFruits.innerText = "Fruits";
let bananas = document.getElementById("banana");
bananas.innerHTML = "美味しい<b>バナナ</b>";

「innerHTML」はHTML文が反映されています。
outerHTML
「outerHTML」は要素のHTML、要素自身のHTMLを取得します。
console.log(element.outerHTML);
<section id="sector1">
<h2 id="fruits">果物</h2>
<p id="banana">ばなな</p>
<p>りんご</p>
<p>ぶどう</p>
<p>オレンジ</p>
<p>いちご</p>
</section>
「innerHTML」との違いを確認してください。
書き換え
let bananas = document.getElementById("banana");
bananas.outerHTML = "美味しい<b>バナナ</b>";
「ばなな」が「美味しいバナナ」に変わります。
「innerHTML」と「outerHTML」のどちらでも書き換えすることが出来ました。
しかし、ここで注意して欲しい点があります。
それは、「innerHTML」は要素を完全に削除し変更するのに対して、「outerHTML」は要素の変更はせずに、単純に書き換えるのみだということです。
以下、例を見てみましょう。
newFruits.innerHTML = "FRUITS"; bananas.outerHTML = "美味しい<b>バナナ</b>"; console.log(newFruits); console.log(bananas); <h2 id="fruits">FRUITS</h2> <p id="banana">ばなな</p>
どちらも書き換えをしましたが、元のHTML文は、「outerHTML」の方は変わっていません。
これらの違いを、実際のコードを書く時に意識する必要がある場合もありますので、頭に入れておきましょう。
あとがき
全体的には難しくなかったと思います。
しかしノードを理解しておくことは非常に重要ですので、しっかりと身につけておきましょう。
今回も最後までお読み頂きありがとうございました。


