Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало пути.doc
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
8 Мб
Скачать

Создание новых узлов

DOM поддерживает следующие методы, связанные с созданием но­вых узлов:

createElement(tagName) – создает узел (тег) с именем, переданным в параметре;

createTextNode(string) – создает текстовый узел с содержанием, пе­реданным в параметре.

createAttribute(name) – создает атрибут с именем, переданным в па­раметре;

createComment(string) – создает HTML-комментарий в виде <!--string -->, текст комментария передается в параметре;

createDocumentFragment() – создает новый документ для хранения новых узлов;

Создание новых элементов обсудим на примере. Предпо­ложим, что нужно добавить к существующему списку элемент: <LI>XML</LI>. Этому элементу в DOM соответствуют два узла: узел-элемент<LI>и текстовый узел"XML". Следовательно, нужно создать два новых узла с помощью методов createElement()и createTextNode() объ­екта document.

var oItem = document.createElement("LI")

var oText = document.createTextNode("XML")

Чтобы узел стал частью документа, его надо добавить к существую­щим узлам с помощью методов insertBefore(), appendChild() или replaceNode().

Метод appendChild(newChild) добавляет новый узел newChild после узла, кото­рый его активизировал. Например, строка кода:

oItem.appendChild(oText) добавляет узел oText к узлу oItem. Для добавления узлов в документ используются также метод:

insertBefore(newChild, referenceChild);

Теперь имеем в памяти элемент (веточку из двух узлов) <LI>XML</LI>

Пора вставлять эту веточку в текущий документ. Если мы хотим вставить ее в конец списка, то надо исполь­зовать метод appendChild():

oList.appendChild(oItem)

Поскольку узел oList, к которому мы присоединили узел oItem, явля­ется частью текущего документа, созданный нами элемент списка также становится частью документа. Теперь наш список выглядит так:

<UL ID="components">

<LI>HTML</LI>

<LI>CSS</LI>

<LI>Javascript</LI>

<LI>XML</LI>

</UL>

Обсудим теперь как можно вставить созданный нами элемент спи­ска не в конец, а, скажем, после элемента списка<LI>HTML</LI>. Сде­лать это можно с помощью метода insertBefore(), который до­бавляет новый узел перед дочерним узлом, указанным в параметре referenceChild. В отличие от метода appendChild(), метод insertBefore() позволяет указать, в какое место коллекции childNodes будущего родительского узла будет вставлен новый узел. В качестве первого параметра метод insertBefore() принимает ссылку на узел, который мы хотим добавить, а в качестве второго параметра - ссылку на узел, перед которым будет вставлен новый узел. Второй параметр метода не является необязательным, если родительский узел не имеет деток. Итак, код

var oBrother = oList.firstChild.nextSiblingoList.insertBefore(oItem, oB­rother)

добавляет в коллекцию childNodes узла oList узел oItem сразу после узла childNodes[0].

Теперь наш первоначальный список выглядит так:

<UL ID="components">

<LI>HTML</LI>

<LI>XML</LI>

<LI>CSS</LI>

<LI>Javascript</LI>

</UL>

Пример:

<!-- пример pr30: -->

<html>

<head>

<title>A Simple Page</title>

<script type="text/javascript">

function modify() {

var newElem = document.createElement("p");

newElem.id = "newP";

var newText = document.createTextNode("This is the second paragraph.");

newElem.appendChild(newText);

document.body.appendChild(newElem);

document.getElementById("emphasis1").childNodes[0].nodeValue = "first ";

}

</script>

</head>

<body>

<button onClick="modify()">Add/Replace Text</button>

<p id="paragraph1">This is the <em id="emphasis1">one and only</em> paragraph on the page.</p>

</body>

</html>