Статьи » Некоторые новшества при работе с DOM в библиотеки dart:dom
Некоторые новшества при работе с DOM в библиотеки dart:dom
Для доступа к содержимому и операций с ним в HTML/XML документами используется программный интерфейс DOM (Document Object Model), согласно которому, документ представляется в виде дерева, каждый узел которого может представлять собой элемент, атрибут элемента, текст или любой другой объект. Стандарт DOM предусматривает несколько различных способов поиска и выборки элементов внутри иерархии документа:
- getElementById() - получение элемента по его уникальному идентификатору
- getElementsByTagName() - получение массива элементов по типу
- getElementsByName() - получение массива элементов по имени
- getElementsByClassName() - получение массива элементов по имени класса
- querySelector() - выборка элемента по CSS селектору
- querySelectorAll() - выборка массива элементов по CSS селектору.
- document.links - коллекция всех ссылок в документе
- document.images - коллекция всех изображений в документе
- document.forms - коллекция всех форм
- document.scripts - коллекция всех скриптов
В библиотеки dart:html вместо всего этого множества способов предлагается использовать только два метода (на основе CSS селекторов) по получению групп и отдельных элементов - query(), queryAll(). Разработчики dart при это ссылаются на успех библиотеки jQuery, в которой основным механизмом выборки и обращения к элементам документа являются селекторы.
element.query('#article'); // получение элемента по уникальному идентификатору (id = article) element.query('form'); // получение элемента form element.queryAll('form'); // выборка группы элементов form element.queryAll('.dot'); // выборка группы элементов с классом dot (class = dot) element.queryAll('form.dot'); // выборка группы элементов form с классом dot (class = dot) element.queryAll('[name="user"]'); // выборка группы элементов с имененм user (name = user) element.queryAll('form label'); // выборка всех элементов label внутри элементов form
Коллекции элементов
В JavaScript коллекции элементов и атрибутов DOM не наследуются от встроенного объекта Array, что приводит к тому, что для работы с ними, приходится использовать специальные функции, отличные от стандартных. В библиотеки dart:html разработчиками эта проблема решена так, что элементы и атрибуты DOM и их массивы реализуют стандартные интрефейсы работы с коллекциями, тоесть, нет необходимости использовать дополнительные функции и методы:
// проверка наличие атрибута с заданным именем у элемента
element.hasAttribute('class'); // JavaScript
element.attributes.contains('class'); // Dart
// получение значения атрибута с заданным именем у элемента
element.getAttribute('src'); // JavaScript
element.attributes['src']; // Dart
// установка значения атрибута с заданным именем у элемента
element.setAttribute('src', 'value'); // JavaScript
element.attributes['src'] = 'value'; // Dart
// удаление атрибута
element.removeAttribute('name'); // JavaScript
element.attributes.remove('name'); // Dart
// проверка наличия дочерных узлов у элемента
element.hasChildNodes(); // JavaScrit
element.nodes.isEmpty(); // Dart
// получение первого потомка элемента
element.firstChild(); // JavaScript
element.nodes[0]; // Dart
// добавление нового потомка элемента
element.appendChild(child); // JavaScript
element.nodes.add(child); // Dart
Создание элементов
В JavaScript для создания новых элементов документа приходилось использовать методы документа - document.createElement('div'), в библиотеке dart:html для этих целий используются конструкторы объектов:
Element element = new Element.tag('div').
также можно использовать и более сложные конструкции, например, таблицу можно создать непосредственно из html разметки:
TableElement table = new Element.html('<table><tr><td>TABLE</td></tr></table>');