Реклама

Партнеры

Добавление обработчика события с помощью JavaScript Постраничная навигация: теория и практика
Ноя 16

Обход child nodes (потомков) определнного элемента в Javascript

Речь о том как корректно обойти элементы потомки DOM для данного элемента, простите за тафтологию :)

В общем конструкция следующая:

JAVA:
  1. var object = document.getElementById('el');
  2. for (var childItem in object.childNodes) {
  3. if (object.childNodes[childItem].nodeType == 1)
  4. object.childNodes[childItem].style.color = '#FF0000';
  5. }

В данном примере мы берем некоторый элемент с id = 'el' и проходим по массиву его потомков (childNodes), при этом проверяем nodeType потомка, чтобы он был элементом страницы и если так, то окрашиваем его в КРАСНЫЙ цвет.

В принципе на базе этой конструкции можно организовать рекурсивный обход дерева всех потомков заданного элемента, если конечно возникнет такая необходимость, но пока я представляю только упрощенный вариант.

Здесь следует обратить внимание на проверку свойства nodeType == 1, дело в том что без этой проверки в обработку попадут и разрывы строк, т.е. символы "\n", которые тоже воспинимаются как ноды. Т.е. например конструкция вида:

HTML:
  1. <div id="el">
  2. <p>1111</p>
  3. <p>2222</p>
  4. <p>3333</p>
  5. </div>

и конструкция:

HTML:
  1. <div id="el"><p>1111</p><p>2222</p><p>3333</p></div>

без этой проверки обрабатывались бы по разному, т.е. в первом случае мы бы получили ошибку, поскольку потомок " \n " не имеет свойства style :)

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Высказано 2 мнений на “Обход child nodes (потомков) определнного элемента в Javascript”

  1. Автор:Sun

    так быстрее и меньше кода
    var object = document.getElementById('el').getElementsByTagName('*');
    for(var i=0;object;i++){
    object
    .style.color = '#FF0000';
    }
    ....

  2. Автор:kot

    5 баллов.

    Примерчик пригодился, спасибо.

    Sun, getElementsByTagName не поддерживает ИЕ, смысл его использовать?

Оставить ответ