JS в браузере
querySelector, поиск элемента по селектору
var list = document.querySelector('.price:last-child');
classList.add, добавление класса
product.classList.add('product--sale');
querySelectorAll, поиск нескольких элементов
var product = querySelector('.product:nth-child(' + i + ')');
children
var product = querySelector('ul').children;
добавление элемента
var list = document.querySelector('.cards'); var card = document.createElement('li'); card.classList.add('card'); // После вызова этого метода новый элемент отрисуется на странице list.appendChild(card);
Свойство textContent, текстовое содержимое
p.textContent = 'Теперь у меня новое содержимое.';
var picture = document.createElement('img');
picture.src = 'images/picture.jpg'
События
button.addEventListener('click', function () { // Инструкции });
function(evt) { // Отменяем действие по умолчанию evt.preventDefault();
переменные из тела функции доступны только внутри этой функции.
Замыкание
функция, которая помнит о своём окружении.
в памяти вместе с функцией хранится то значение переменной, которое было при объявлении этой функции.
То есть это функция + все значения переменных вне локальной области видимости этой функции.
eatDinner вместе с переменной food являются замыканием.
Манипуляция с DOM
Статичные и динамические коллекции
querySelectorAll - статическая
parent.children - динамическая
при удалении элемента в динамические коллекции тоже происходят изменения
template
Тег, который хранит разметку, но изначально не показывается на странице, используется для js чтобы была готовая разметка для элементов
var textTemplate = document.querySelector('#text-template').content; var text = textTemplate.querySelector('.text');
Мы не можем вставить один элемент несколько раз в разные места страницы
Для этого нужно использовать метод cloneNode
Если передать значение false, то будет скопирован сам элемент со своими классами и атрибутами, но без дочерних элементов.