Метод >replaceChild используется для замены одного дочернего узла другим. Он принимает два узла: новый, и тот, который надо заменить. Заменяемый узел должен быть дочерним узлом того элемента, чей метод мы вызываем. Как >replaceChild, так и >insertBefore в качестве первого аргумента ожидают получить новый узел.
Создание узлов
В следующем примере нам надо сделать скрипт, заменяющий все картинки (тег >) в документе текстом, содержащимся в их атрибуте >alt, который задаёт альтернативное текстовое представление картинки.
Для этого надо не только удалить картинки, но и добавить новые текстовые узлы им на замену. Для этого мы используем метод >document.createTextNode.
>
Это в
> .
>
>
> function replaceImages() {
> var images = document.body.getElementsByTagName("img");
> for (var i = images.length - 1; i >= 0; i--) {
> var image = images[i];
> if (image.alt) {
> var text = document.createTextNode(image.alt);
> image.parentNode.replaceChild(text, image);
> }
> }
> }
>
Получая строку, >createTextNode даёт нам тип 3 узла DOM (текстовый), который мы можем вставить в документ, чтобы он был показан на экране.
Цикл по картинкам начинается в конце списка узлов. Это сделано потому, что список узлов, возвращаемый методом >getElementsByTagName (или свойством >childNodes) постоянно обновляется при изменениях документа. Если б мы начали с начала, удаление первой картинки привело бы к потере списком первого элемента, и во время второго прохода цикла, когда >i равно 1, он бы остановился, потому что длина списка стала бы также равняться 1.
Если вам нужно работать с фиксированным списком узлов вместо «живого», можно преобразовать его в настоящий массив при помощи метода >slice.
>var arrayish = {0: "один", 1: "два", length: 2};
>var real = Array.prototype.slice.call(arrayish, 0);
Для создания узлов-элементов (тип 1) можно использовать >document.createElement. Метод принимает имя тега и возвращает новый пустой узел заданного типа. Следующий пример определяет инструмент >elt, создающий узел-элемент и использующий остальные аргументы в качестве его детей. Эта функция потом используется для добавления дополнительной информации к цитате.
>
>Никакая книга не может быть закончена. Во время работы над ней мы узнаём достаточно для того, чтобы найти её незрелой сразу же после того, как мы отвлеклись от неё.