Добавляем...


Другие свойства доступа
Кроме document. getElementById() имеются и другие методы и свойства, полезные для доступа к узлам документа. Особенно ценными являются коллекции, предлагаемые моделью DOM уровня 0 для поддержки традиционных подходов JavaScript.

getElementsByName() | Исходные пункты обхода дерева | DOM уровня 0: традиционные коллекции JavaScript | Обобщенные коллекции элементов Поскольку во многих старых HTML-документах для идентификации элементов <form>, <input>, <select>, <textarea>, <img>, <a>, <area> и <frame> используется атрибут name (а не id), необходимо иметь возможность получить доступ к таким элементам с помощью name. Для этого используется метод getElementsByName() объекта Document. Этот метод принимает в качестве аргумента строку, указывающую имя (т.е. значение атрибута name) соответствующего элемента. Например:

tagList = document.getElementsByName('myTag');

Этот метод может возвращать список узлов, а не один узел. Дело в том, что в традиционном HTML уникальность значения атрибута name в строгом смысле не требуется, так что, например, одно и то же значение name могут иметь дескриптор <img> и элемент <form>. Также допускается иметь в документе дескрипторы <input> разной формы с одинаковыми именами. Как и в случае любой коллекции JavaScript, здесь можно использовать свойство length, чтобы выяснить длину списка объектов, и просмотреть сам список, используя метод item() или обычный синтаксис массива. Например:

tagList = document.getElementsByName('myTag');
for (var i = 0; i < tagList.length; i++)
alert(tagList.item(i).nodeName);

To же самое можно получить, используя немного другой синтаксис:

tagList = document.getElementsByName('myTag');
for (var i = 0; i < tagList.length; i++)
alert(tagList[i].nodeName);

Возникает вопрос: если метод getElementsByName() возвращает список элементов HTML с одним и тем же значением атрибута name, почему getElementById() не делает то же самое. Напоминаем, что значение каждого из элементов id должно быть уникальным. Разрешение для getElementById() режима, аналогичного режиму getElementsByName(), стимулировало бы еще большую свободу стиля HTML, которая и так уже создает достаточно проблем. Если документ оказывается логически непоследовательным по причине того, что в нем имеются элементы id с одинаковыми значениями, метод getElementById() может не работать вообще либо возвращать только первый или только последний элемент. Иногда невозможно сразу обратиться к конкретной точке дерева документа, поэтому приходится начинать с вершины дерева и продвигаться вниз по его иерархии. Имеются два свойства объекта Document, предлагающие исходные пункты для начала обхода. Свойство document. documentElement указывает на корневой элемент в дереве документа. Для документов HTML это будет дескриптор <html>. Вторую возможную исходную точку дает свойство document .body, которое ссылается на узел, соответствующий в дереве дескриптору <body>. Некоторый интерес может представлять также определение DOCTYPE соответствующего файла. На это определение ссылается document.doctype, но указанный узел не является модифицируемым. Может показаться, что польза от соответствующей информации не слишком велика, но значение document. doctype позволяет выяснить, с каким видом документа вы работаете.. С целью обеспечения обратной совместимости DOM поддерживает объектные коллекции, популярные в первых версиях браузеров. Эти коллекции составляют DOM уровня 0, что приблизительно эквивалентно объектной модели Netscape 3. Коллекции, определенные в DOM уровня 0, представлены в таблице, и обращаться к ним можно по номеру (document.forms[0]), ассоциативно (document.forms[ 'myform' ]) или непосредственно (document.myform). Можно также использовать метод item(), обеспечивающий доступ к индексу массива (document.forms.item(0)), хотя это нетепично и не всегда поддерживаеться в старых версиях JavaScript, поэтому такого способа лучше избегать.
Коллекция Описание
document.anchors[]   Коллекция всех анкеров на странице, определенных с помощью <a name=""> </a>
document.applets[] Коллекция всех аплетов Java на странице
document.forms[] Коллекция всех дескрипторов <form> на странице
document.images[] Коллекция всех изображений на странице, определенных с помощью дескрип-торов <img>
document.links[] Коллекция всех ссылок на странице, определенных с помощью <a href=""> </a>

Вы, очевидно, заметили, что таблица не включает фирменные коллекции типа embeds[ ], all[ ], layers[ ] и т.п. Причина в том, что DOM стремится исключить зависимость сценариев от фирменных возможностей DHTML. Однако старые привычки изживаются в Web очень медленно. Наконец, в DOM уровня 1 предлагается еще один способ доступа к элементам — с помощью метода getElementsByTagName() объекта Document. Этот метод принимает в качестве аргумента строку, задающую тип дескриптора, который необходимо извлечь, например getElementsByTagName('img'). Метод возвращает список всех дескрипторов в документе, которые имеют тип, указанный параметром. При этом, хотя

allParagraphs = document.getElementsByTagName('р');

будет работать вполне корректно, правильнее вызвать данную функцию как метод существующего элемента. Например, чтобы найти все абзацы в рамках дескриптора <body>, необходимо использовать

allParagraphs = document.body.getElementsByTagName('p');

Можно даже найти элементы в рамках других элементов. Например, можно найти конкретный абзац, а затем — дескрипторы <em> внутри него:

paral = document.getElementById('pi');
emElements = paral.getElementsByTagName('em');

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


добавить комментарий
(без перезагрузки и регистрации)


10 случайных разделов

Что ищем на сайте ?


Примеры кода на сайте







@ 2008-2011 Amber
При использовании материалов ссылка на сайт обязательна
Яндекс.Метрика