Основы программирования на JavaScript | страница 31



будет циклически перебирать все элементы TD. Когда элементов TR больше не останется, цикл автоматически закончится, так как TR будет неопределенным, что в JavaScript оценивается как false.

С целью рассмотрения оператора childNodes и функции getElementsByTagName перепишем приведенный пример немного по-другому:


function setColors(tbody, color1, color2){

var colors = [color1, color2];

for(var i=0; i

tbody.childNodes[i].style.backgroundColor = colors[i % 2];

}

}

function setColors(tbody, color1, color2){

var colors = [color1, color2];

var trs = tbody.getElementsByTagName('TR');

for(var i=0; i

trs[i].style.backgroundColor = colors[i % 2];

}

}


Обе эти функции делают то же самое, что и первая функция setColors, но написано это немного по-другому. Первая функция использует атрибут childNodes. Как ранее говорилось, childNodes содержит массив, элементами которого являются потомки. Поэтому мы циклически перебираем tbody.childNodes и изменяем цвет каждого потомка, которые все должны быть элементами TR.

Другая функция использует новую функцию getElementsByTagName, которая выдает массив всех элементов с указанным именем тега. Так как нам требуются все элементы TR, то мы просто передаем в функцию 'TR' и получаем список всех элементов TR в таблице. После этого код почти идентичен предыдущей функции.

Работа с текстом немного отличается от работы с другими элементами DOM. Первое: каждый фрагмент текста на странице помещен в невидимый узел #TEXT. Поэтому следующий код HTML


this is a link and an image:


имеет четыре корневых элемента: текстовый узел со значением "this is ", элемент A, еще один текстовый узел со значением " and an image: " и, наконец, элемент IMG. Элемент A имеет конечный текстовый узел в качестве потомка со значением " a link ". Когда необходимо изменить текст, то прежде всего необходимо получить этот "невидимый" узел. Если мы хотим изменить текст " and an image: ", то необходимо написать:


document.getElementById('ourTest').childNodes[2].nodeValue = 'our new text';


document.getElementById('ourTest') дает нам тег div. childNodes[2] дает узел текста " and an image: " и наконец nodeValue изменяет значение этого узла текста.

Что, если требуется добавить к этому еще текст, но не в конце, а перед " a link "?


var newText = document.createTextNode('our new text');