JavaScript 入門 | ドキュメントオブジェクトモデル | ノードの管理
ノードの追加
次のメソッドを使用すると、特定の位置に新しいノードを追加できる。
- appendChild()
- insertBefore()
- insertData()
appendChild() メソッド
appendChild() メソッドは、新しいノードをそのノードの子ノードリストの末尾に追加する。
function appendNode() {
var parent = document.getElementById("list"); // id が "list" の要素を選択する。
var newItem = document.getElementById("item"); // id が "item" の要素を選択する。
parent.appendChild(newItem); // その要素の最後の子ノードとして追加する。
}
insertBefore() メソッド
insertBefore() メソッドは、新しいノードを特定の子ノードの直前に追加する。
insertBefore() メソッドの形式は次のとおりである。
形式
親ノード.insertBefore(新しい子ノード, 基準子ノード);
- 新しい子ノード: 子ノードリストに新しく追加する子ノードを渡す。
- 基準子ノード: 新しいノードを挿入するときの基準となるノードで、このノードの直前に新しいノードが追加される。
function appendNode() {
var parent = document.getElementById("list"); // id が "list" の要素を選択する。
var criteriaItem = document.getElementById("criteria"); // id が "criteria" の要素を選択する。
var newItem = document.getElementById("item"); // id が "item" の要素を選択する。
parent.insertBefore(newItem, criteriaItem); // そのノードを基準となる子ノードの直前に追加する。
}
基準子ノードに null 値を渡すと、新しいノードは子ノードリストの最後のノードとして追加される。
つまり、appendChild() メソッドと完全に同じ動作をする。
insertData() メソッド
insertData() メソッドは、テキストノードのテキストデータに新しいテキストを追加する。
insertData() メソッドの形式は次のとおりである。
形式
テキストノード.insertData(オフセット, 新しいデータ);
- オフセット: オフセット値は0から始まり、既存のテキストデータの何番目の位置から追加するかを渡す。
- 新しいデータ: 新しく挿入するテキストデータを渡す。
var text = document.getElementById("text").firstChild; // id が "text" の要素のテキストノードを選択する。
function appendText() {
text.insertData(6, " 나른한 "); // テキストノードの6番目の文字から " 나른한 " というテキストを追加する。
}
ノードの作成
作成するノードの種類に応じて、次のようなメソッドを使用できる。
- createElement()
- createAttribute()
- createTextNode()
要素ノードの作成
createElement() メソッドを使用して、新しい要素ノードを作成できる。
function createNode() {
var criteriaNode = document.getElementById("text"); // 基準となる要素として id が "text" の要素を選択する。
var newNode = document.createElement("p"); // 新しい <p> 要素を作成する。
newNode.innerHTML = "새로운 단락이다.";
document.body.insertBefore(newNode, criteriaNode); // 新しい要素を基準となる要素の直前に追加する。
}
属性ノードの作成
createAttribute() メソッドを使用して、新しい属性ノードを作成できる。
同じ名前の属性ノードがすでに存在する場合、既存の属性ノードは新しい属性ノードに置き換えられる。
すでに存在する要素ノードに属性ノードを作成したい場合は、setAttribute() メソッドを使用できる。
function createNode() {
var text = document.getElementById("text"); // id が "text" の要素を選択する。
var newAttribute = document.createAttribute("style"); // 新しい style 属性ノードを作成する。
newAttribute.value = "color:red";
text.setAttributeNode(newAttribute); // その要素の属性ノードとして追加する。
}
テキストノードの作成
createTextNode() メソッドを使用して、新しいテキストノードを作成できる。
function createNode() {
var elementNode = document.getElementById("text"); // id が "text" の要素を選択する。
var newText = document.createTextNode("새로운 텍스트에요!"); // 新しいテキストノードを作成する。
elementNode.appendChild(newText); // その要素の子ノードとして追加する。
}
ノードの削除
次のメソッドを使用すると、特定のノードを削除できる。
- removeChild()
- removeAttribute()
removeChild() メソッド
removeChild() メソッドは、子ノードリストから特定の子ノードを削除する。
このメソッドはノードの削除に成功すると、削除されたノードを返す。
ノードが削除されるときは、削除されるノードのすべての子ノードも一緒に削除される。
var parent = document.getElementById("list"); // id が "list" の要素を選択する。
var removedItem = document.getElementById("item"); // id が "item" の要素を選択する。
parent.removeChild(removedItem); // 指定された要素を削除する。
removeAttribute() メソッド
removeAttribute() メソッドは、属性名を利用して特定の属性ノードを削除する。
var text = document.getElementById("text"); // id が "text" の要素を選択する。
text.removeAttribute("style"); // その要素の "style" 属性を削除する。
ノードの複製
cloneNode() メソッドを使用すると、特定のノードを複製できる。
cloneNode() メソッド
cloneNode() メソッドは、既存のノードとまったく同じ新しいノードを作成して返す。
cloneNode() メソッドの形式は次のとおりである。
形式
複製するノード.cloneNode(子ノードを複製するかどうか);
- 子ノードを複製するかどうか: 渡された値が true であれば、複製されるノードのすべての属性ノードと子ノードも一緒に複製し、false であれば属性ノードだけを複製して子ノードは複製しない。
function cloneElement() {
var parent = document.getElementById("list"); // id が "list" の要素を選択する。
var originItem = document.getElementById("item"); // id が "item" の要素を選択する。
parent.appendChild(originItem.cloneNode(true)); // そのノードを複製してリストの最後に追加する。
}