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, то будет скопирован сам элемент со своими классами и атрибутами, но без дочерних элементов.