JS - DOM

JS – DOM

Поиск элементов

document.getElementById('auth')

getElementById – Ищет элемент в HTML по id. Возвращает [object HTMLFormElement]

document.querySelector('.auth')

querySelector – Ищет по CSS селектору, в данном случае по классу auth. Селектор может быть любой, возвращает первый найденный элемент [object HTMLFormElement]

document.querySelectorAll('input,button')

querySelectorAll – Также ищет по CSS селектору, но возвращает все элементы [object NodeList]

Способы обхода object NodeList

1-ый вариант через for:

var collection = document.querySelectorAll('input,button'); 

for (var i = 0, len = collection.length; i < len; i++) {
  var elem = collection[i];
}

2-ой вариант с помощью метода Array.prototype.slice преобразовать нашу коллекцию к настоящему массиву и уже воспользоваться всеми методами, которые есть у массива.

var elems = document.querySelectorAll('input,button');

var elemsList = Array.prototype.slice.call(elems);

elemsList.forEach(function(elem) { 
  ...
});

3-ий вариант – Array.from

var elemsList = Array.from(document.querySelectorAll('input,button'));

elemsList.forEach(function(elem) {
  ...
});

Атрибуты и свойства

getAttribute – читает атрибут

hasAttribute – проверяет наличие атрибута

setAttribute – устанавливает атрибут

removeAttribute – удаляет атрибут

Например:

var form = document.getElementById('auth');
form.getAttribute('action'); 
form.setAttribute('method', 'POST');
form.hasAttribute('method');
form.removeAttribute('method');

data-атрибуты

data-атрибуты – атрибуты, которые начинаются с префикса data-, а далее следует название атрибута в виде латинских букв, цифр и знаков дефиса. И с помощью них можно записывать совершенно произвольные значения под совершенно произвольным именем.

Существует специальный объект dataset, который есть внутри любого DOM- элемента, который содержит значения всех data-атрибутов, которые есть внут- ри этого элемента. Он преобразовывает имя атрибута, убирает от него префикс data-, а все дефисы и последующие буквы преобразуют к CamelCase. Таким образом имя атрибута становится валидным идентификатором для перемен- ной в JavaScript, и мы можем обращаться к нему через так называемую дот- нотацию. И мы можем с помощью этого как обратиться к атрибуту на чтение, так и установить новое значение атрибута, которые будет прописано в DOM- дерево уже в развернутом data- виде.

Например:

form.getAttribute('data-form-value');
form.dataset.formValue;

form.dataset.hasOwnProperty('formValue');

form.dataset.fooBarBazBaf = 'boo';
form.hasAttribute('data-foo-bar-baz-baf');

Свойства

У всех элементов есть как атрибуты, так и свойства. И это совершенно разные вещи

form.getAttribute('action');
form.getAttribute('method'); 
form.getAttribute('id'); 

form.action;
form.method;
form.id;

Лучше пользоваться атрибутами

Классы

Для работы с классами, есть свойство className

form.className;
form.className += ' login-form';

Пользоваться им не очень удобно, удобнее использовать метод classList

  • add – добавляет класс к списку существующих
  • item – получает класс по его индексу и по порядковому расположению в html-элементе
  • contains – позволяет по имени класса проверить, есть ли он внутри этого элемента
  • remove – удаляет класс из html-элемента

Например:

form.classList.add('login-form');
form.classList.item(1);
form.classList.item(2);
form.classList.contains('login-form');
form.classList.remove('login-form');

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

createElement – используется для создания элементов

Например:

var elem = document.createElement('span');

elem.className = 'error';
elem.setAttribute('id', 'auth-error');
elem.setAttribute('status', 'auth-error');
elem.textContent = 'Введен неверный логин или пароль';

appendChild – позволяет добавить наш элемент к любому другому, как дочерний

Например добавляем к body

document.body.appendChild(elem);

cloneNode – метод который позволяет скопировать элемент

В качестве параметра, можно передать true или false (значение по умолчанию)

Если передать true – также будут скопированы и все дочерние элементы.

Например:

var clone = elem.cloneNode(true);

Удаление элементов из DOM

  const el = Array.from(spTabl.querySelectorAll('li'));

  el.forEach(element => {
    element.remove();
  });

События в DOM

Добавляем слушателей событий:

var button = document.querySelector('button');

button.addEventListener('click', function(event) {
  console.log(this, event);
});

button.addEventListener('click', clickHandler);

button.addEventListener('click', yetAnotherClickHandler);

События выполняются в порядке их добавления.

Всплытие события

Это значение, которое принимается по умолчанию в браузерах, передается третьим параметром. При нем событие как бы поднимается вверх, от самого глубокого DOM-узла — к самому верхнему и заканчивается на объекте document, который описывает весь наш HTML документ.

Погружение события

При этом обработчике событий событие погружается от самого верхнего эле- мента к самому глубокому, самому нижнему, на котором оно могло бы про- изойти, и сначала срабатывает на объекте document и постепенно погружается вниз. Для того, чтобы событие перехватывалось, в качестве последнего параметра в addEventListener вам нужно передать true.

Остановка всплытия или погружения

Иногда вы хотите остановить событие на каком-то конкретном участке и не хотите, чтобы оно всплывало или погружалось далее. Для того, чтобы остановить всплытие, существует метод stopPropagation, который вызывается у объекта «событие».

var button = document.querySelector('button');

button.addEventListener('click', function(event) {
  event.stopPropagation();
}, true);

Отмена действий по умолчанию

У многих DOM-элементов есть так называемые действия по умолчанию. На- пример, при клике на ссылки, мы переходим по ссылке, при клике по кнопке мы отправляем форму.Для того чтобы отменить действие по умолчанию, су- ществует метод preventDefault, который вызывается у объекта-события.

var form = document.getElementById('auth');
  form.addEventListener('submit', function(event) { 
    console.log(event.target);
    event.preventDefault();
});

Делегирование событий

Делегировние событий – метод обработки события на родительском элементе относительно того, на котором оно произошло фактически. Получить сам элемент, на котором произошло событие, можем при помощи event.target

Оставить комментарий