Работа со структурой DOM

Последнее обновление: 1.11.2015

Подобно ряду многих других js-фреймворков и библиотек AngularJS позволяет работать со структорой DOM html-страницы: то есть добавлять, удалять, изменять html-элементы. Подобная функциональность реализована с помощью специального API, которое во многом напоминает jQuery и называется jqLite (jQuery - lite). Данное API реализовано в виде методов, которые позволяют управлять html-элементом. Рассмотрим ряд методов.

Навигация по странице

Для навигации по html-странице мы можем применять ряд методов:

  • children(): возвращает набор дочерних элементов

  • eq(index): возвращает элемент по определенному индексу из коллекции элементов

  • find(tag): получает все элементы по определенному тегу

  • next(): возвращает следующий сестринский элемент

  • parent(): возвращает родительский элемент

  • html(): возвращает html-код элемента

  • text(): возвращает текстовое содержимое элемента

Например, возьмем структуру страницы из прошлых тем:

<!doctype html>
<html ng-app="questApp">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/mystyles.css" />
</head>
<body>
<div  ng-controller="QuestionController">
<div class="quest">
<h3>{{question.text}}</h3>
<p>{{question.author}} </p> <p><i>{{question.date}}</i></p>
</div>
<h3>Ответы</h3>
<div class="answers">
<div ng-repeat="answer in question.answers" class="answer">
<div class="vote">
    <a class="vote-up" ng-click="voteUp(answer)"></a>
    <span class="rate">{{answer.rate}}</span>
    <a class="vote-down" ng-click="voteDown(answer)"></a>
</div>
<b>{{answer.text}}</b>
<p>{{answer.author}}</p>
<p><i>{{answer.date}}</i></p>
</div>
</div>
</div>
<script src="js/lib/angular.min.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers/QuestionController.js"></script>
</body>
</html>

Применим ряд методов для получения элементов:

// получаем элент body
var elem = angular.element(document.querySelector("body"));
// выводим html элемента body
console.log(elem.html());
// получаем элемент с классом quest
var quest = angular.element(document.querySelector(".quest"));
// получаем дочерний элемент h3
var questHeader = quest.find('h3');
// выводим его текст
console.log(questHeader.text());

Для конкретизации выборки используется метод javascript document.querySelector(".quest"), который в качестве параметра принимает селектор. Затем к найденному элементу применяется метод angular.element(), который фактически создает обертку для найденного элемента. И после мы можем работать с полученным элементом с помощью методов angularjs.

Также обратите внимание, что свойство questHeader.text() будет содержать текст {{question.text}}, то есть текст до обработки его AngularJS.

Манипуляция элементами

  • addClass(name): добавляет к элементу класс

  • attr(name) / attr(name, value): получает значение value атрибута name элемента и устанавливает его

  • css(name) / css(name, value): получает значение value стиля name у элемента и устанавливает его

  • hasClass(name): возвращает true, если элемент имеет класс name

  • prop(name) / prop(name, value): получает значение value свойстваа name элемента и устанавливает его

  • removeAttr(name): удаляет у элемента атрибут

  • removeClass(name): удаляет у элемента класс

  • text(value): устанавливает текстовое значение у элемента

  • toggleClass(name): переключает класс - класс name добавляется, а все ранее имевшиеся классы удаляются

  • val() / val(value): получает значение атрибута value и устанавливает его значение

Например, у нас есть следующий html-код:

<div class="quest">
<h3>{{question.text}}</h3>
<p>{{question.author}} </p> <p><i>{{question.date}}</i></p>
</div>

Изменим заголовок, применив к нему несколько методов:

var quest = angular.element(document.querySelector(".quest"));
var questHeader = quest.find('h3');
// изменим текст заголовка
questHeader.text("Заголовок h3");
// окрасим заголовок в те цвета, в которые он себя окрасит
questHeader.css("color", "blue");
// добвим класс
questHeader.addClass("header");

Создание и удаление элементов

Следующие методы позволяют управлять созданием и удалением элементов:

  • angular.element(html): создает определенный элемент с кодом html

  • after(elements): добавляет элементы elements после элемента, на котором вызывается данный метод

  • append(elements): добавляет элементы elements в качестве дочерних в конец элемента, на котором вызывается данный метод

  • clone(): создает копию элемента, для которого вызывается метод

  • prepend(elements): добавляет элементы elements в качестве дочерних в начало элемента, на котором вызывается данный метод

  • remove(): удаляет элемент

  • replaceWith(element): заменяет элемент, на котором вызывается метод, другим элементом, который передается в качестве параметра

  • wrap(element): обертывает элемент, на котором вызывается метод, новым элементом, передающимся в качестве параметра

Применим ряд методов:

var quest = angular.element(document.querySelector(".quest"));
var questHeader = quest.find('h3');
// удалим заголовок
questHeader.remove();
// создадим новый элемент div
var newDiv = angular.element("<div>");
// установим у него стили
newDiv.css("width", "80px");
newDiv.css("height", "50px");
newDiv.css("background-color","blue");
// добавим в div.quest
quest.append(newDiv);

Регистрация событий

jqLite поддерживает регистрацию стандартных событий javascript. Для этого определены методы:

  • on(events, handler): регистрирует обработчик для одного или нескольких событий

  • off(events, handler): удаляет ранее зарегистрированный обработчик для нескольких событий

  • triggerHandler(event): вызывает обработчики для события

newDiv.on("click", function (e){
	var w = parseInt(newDiv.css("width")) + 10;
	newDiv.css("width", w+"px");
});
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850