ページ内の表示可能なすべての HTML テキスト (フォーム要素またはカスタム埋め込みオブジェクト内のテキストを除く) は、テキスト ノードにあります。このページは、さまざまなタイプのノードで構成されています (さまざまなノード タイプのリストは、https ://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType で確認できます)。子ノードを持つことができるものと、できないものがあります。たとえば、div は子ノードを含むことができる ELEMENT ノードです。これらの子ノードは、他の ELEMENT ノードにすることも、TEXT ノード、COMMENT ノード、または他のタイプのノードにすることもできます。
要素ノードのプロパティを設定する.innerHTML
と、適切なノードが作成され、innerHTML プロパティを設定した要素の子ノードになります。セットにテキストがある場合はinnerHTML
、それを保持するためのテキスト ノードが作成されます。
DOCUMENT_NODE
、ELEMENT_NODE
およびTEXT_NODE
は最も一般的なノード タイプであり、テキストを含むすべてのページにあります。
あなたのコード例では:
var div = document.createElement('div');
var text = document.createTextNode('Y HALO THAR');
div.appendChild(text);
これにより、1 つのテキスト ノードが作成され、作成した div に配置されます。これは、次と同じ DOM 構造を生成します。
var div = document.createElement('div');
div.innerHTML = 'Y HALO THAR';
後者の場合、システムによってテキスト ノードが作成されます。
プレーンな JavaScript プログラミング (jQuery は、タイプ ではないノードから開発者を保護する傾向がありELEMENT_NODE
ます) では、テキストを含む要素の子ノードをたどるたびに、テキスト ノードに遭遇します。.nodeType
各子の をチェックして、それが別の要素であるか、テキスト ノードであるか、または他のタイプのノードであるかを確認する必要があります。
一般に、テキスト ノードを直接操作する理由はあまりありません。より高いレベルの.innerHTML
プロパティをより簡単に使用できることが多いからです。しかし、参考までに、テキスト ノードを直接処理する理由をいくつか示します。
周囲の要素に影響を与えずにテキストを変更したい。 .innerHTML
影響を受ける要素のすべての新しい要素を作成し、それらに設定されている可能性のあるイベント ハンドラーを強制終了しますが.nodeValue
、テキスト ノードに を設定しても、要素が再作成されることはありません。
結果の HTML マークアップを含まないドキュメント内のテキストだけを検索し、各テキストが DOM 階層のどこにあるかを正確に知りたい場合は、すべてのテキスト ノードを検索できます。たとえば、ドキュメントのテキスト検索を行って、見つかったテキストを強調表示する場合、おそらくテキスト ノードを直接検索します。
を使用した場合にブラウザが解析および解釈する他のマークアップが含まれている可能性があるというセキュリティ リスクなしで、テキストを表示したいとします.innerHTML
。したがって、テキスト ノードを作成し、そのテキストの値を設定すると、ブラウザーはその中の HTML を解釈しません。最新のブラウザーは、この問題を解決する.textContent
代わりに、要素のプロパティを使用することもできます。.innerHTML