Удаление и замена узлов в документе
Метод replaceChild()позволяет у узла, который его активизирует, заменить одного из его деток на нового. Ссылку на новый и на заменяемый узлы метод принимает в качестве первого и второго параметров, соответственно. Так, следующий фрагмент сценария
var oItem = document.createElement("LI")
oItem.appendChild(document.createTextNode("JScript"))
oList.replaceChild(oItem, oList.lastChild)
создает сначала элемент списка с текстом "JScript", а затем заменяет им последний элемент нашего списка. Метод возвращает ссылку на вставленный в документ узел.
Теперь наш список выглядит так:
<UL ID="components">
<LI>HTML</LI>
<LI>CSS</LI>
<LI>JScript</LI>
</UL>
Конечно, описанный выше пример надо рассматривать только как иллюстративный, поскольку тот же результат можно получить гораздо проще:
oList.lastChild.firstChild.nodeValue= "JScript"
Удаление: методы removeChild()и removeNode()
Метод removeChild() позволяет у узла удалить одного из его потомков. Ссылку на удаляемый узел метод принимает в качестве параметра. Например, строка кода
var oRemovedItem = oList.removeChild(oList.lastChild)
удаляет из списка последний элемент. Метод возвращает ссылку на удаляемый им узел. Поскольку удаленный из документа узел остается в памяти, мы можем в дальнейшем работать с ним, используя эту ссылку. Еще один метод заменяет узел oldChild на newChild.
currentNode.replaceChild(newChild, oldChild)
Если мы хотим удалить некоторый узел из документа, то надо воспользоваться методом removeNode(). Этот метод не входит в список рекомендуемых W3C, но поддерживается браузерами. В качестве параметра метод принимает выражение типа Boolean. Если оно равно false, то удаляется только тот узел, который активизировал метод. При этом, идущая от него ветвь дерева присоединяется к его родительскому узлу. Если параметр метода равен true, то узел удаляется вместе со всеми своими потомками. Например, строка кода удаляет из документа весь наш список целиком.
var oRemovedList = oList.removeNode(true)
Метод removeNode() возвращает ссылку на удаляемый узел. Поскольку удаленный из документа узел остается в памяти, мы можем в дальнейшем работать с ним.
Использование каскадных таблиц стилей в DOM
Каждый узел DOM имеет объект style, который описывает применяемые стили. Например, можно изменить цвет шрифта элемента "samplePtag", document.getElementById("samplePtag").style.color = «red».
Более подробно обо всех свойствах можно узнать в спецификации CSS (http://www.w3.org/Style/CSS/#specs).
Свойство элемента innerHTML и outerHTML
Хотя свойства innerHTML и outerHTML не являются официально поддерживаемыми стандартами, однако они поддерживаются практически всеми современными браузерами.
Свойство innerHTML содержит HTML-код между открывающим и закрывающим тегом. С помощью этого свойства можно работать с кодом внутри тега, как со строкой – считывать и записывать. Однако для следующей группы элементов это свойство доступно только для чтения: COL, COLGROUP, HTML, STYLE, TABLE, THEAD, TITLE, TR. Свойство innerHTML не существует у элементов, которые не имеют одновременно открывающего и закрывающего тега (например <br>).
Отличие свойства outerHTML в том, что это свойство включает в себя HTML-код между открывающим и закрывающим тегом, а также открывающий и закрывающий тег этого элемента.
Для следующих элементов это свойство доступно только при чтении: CAPTION, COL, COLGROUP, HTML, TBODY, TD, TH, THEAD, TR. Свойство outerHTML доступно для записи только после того, как весь документ будет загружен, т.е. произойдет событие window.onload.
В качестве иллюстрации ниже приведен пример использования свойства outerHTML. Когда пользователь щелкает по кнопке передачи формы на сервер, вместо кнопки появляется сообщение с благодарностью:
<INPUT TYPE="submit" VALUE="Отправить"
onClick="this.outerHTML='Благодарим Вас за участие в нашем опросе.'">
А вот как это же действие можно реализовать, используя только средства W3C DOM:
<INPUT TYPE="submit" VALUE="Отправить"
onClick="replaceButton(this)">
<script type="text/javascript">
function replaceButton(oButton) {
var oText = document.createTextNode("Благодарим Вас за участие в нашем опросе.")
var oParent = oButton.parentNode
oParent.replaceChild(oParagraph,oButton)
}
</script>
Ниже приведен пример использования свойств innerHTML и outerHTML:
<!-- пример pr31: использование свойств -->
<html><head>
<script type="text/javascript">
function transformBody() {
var myPar = document.getElementById("myP");
myP.innerHTML = "<i>Hello, World!</i>";
myP.outerHTML = "<strong>" + myP.innerHTML
+ "</strong>";
}
</script>
</head>
<body onload="transformBody();">
<p id="myP">sample text</p>
</body>
</html>
<!-- после выполнения функции структура элемента body будет:
<BODY><STRONG><I>Hello, World!</I></STRONG></BODY>
-->