08 (часть 2). JS с нуля, ваще с нуля (Разбор ДЗ, урок 08)

Оценить качество материала и подачу материала автором видео:

Front-end

Трудоустройтесь middle front-end разработчиком на React JS (TypeScript) за 12-16 месяцев обучения с ежедневной менторской поддержкой в формате видео 1 на 1 и коммерческими проектами в портфолио

Перейти на курс
Front-end

Back-end

Трудоустройтесь middle back-end разработчиком за 12-16 месяцев обучения с ежедневной менторской поддержкой в формате видео 1 на 1 и коммерческими проектами в портфолио

Перейти на курс
Back-end

Карьерный бустер

Получите коммерческий опыт на реальных стартапах, прокачайте tech & soft навыки, научитесь работать в команде, проходить собеседования и получите первую работу в IT!

Перейти на курс
Карьерный бустер

Основы Front-end

Сделайте первый шаг в IT, освоив базовые знания разработки и научившись создавать небольшие проекты на JavaScript

Перейти на курс
Основы Front-end

Основы Back-end

Сделайте первый шаг в IT, освоив базовые знания разработки. Без опыта. Без математики. Только практика: JavaScript, SQL, Node JS, база данных

Перейти на курс
Основы Back-end

Разбор ДЗ, урок 08

Автор конспекта: Бадалова Елена

Практика

На прошлом уроке мы с вами рассмотрели функцию getElementById, которая позволяет нам находить элементы на странице html. Благодаря этой функции мы можем находить элемент расположенный на странице и детально его исследовать.

index.js
// находим элемент по id и присваиваем результат (найденный элемент) переменной firstNameElement
var firstNameElement = document.getElementById("first-name")

Давайте попрактикуемся исследовать элементы выполняя домашнее задание с прошлого урока.

Задание 0

Представьте, что вы зашли на страницу редактирования вашего профиля. Сейчас здесь только одно поле - Имя, заполненное именем (измените его на своё)

index.html
<input value="myName" class="first-name" id="first-name" />

Задание 1

Выведите в alert class (по аналогии с value) для найденного firstNameEl (атрибуту class у тэга соответствует свойство className у его объекта\души)

Логично предположить, что для HTML-атрибута class должно существовать свойство .class. Однако если вы попробуете это сделать, то получите undefined. Правильное свойство — .className.

⚠️

Не все HTML-атрибуты соотносятся один к одному со свойствами JS-объекта.

index.html
<input value="myName" class="first-name" id="first-name" />
index.js
window.alert(firstNameElement.className)

Задание 2

Добавьте в разметку ещё 2 input для фамилии (lastName) и адреса (address)

index.html
<input value="myName" class="first-name" id="first-name" />
<input value="Kuzyubedrin" class="last-name" id="last-name" />
<input value="Minsk city" class="address" id="address" />

Задание 3

Заполните value своими данными

index.html
<input value="myName" class="first-name" id="first-name" />
<input value="myLastName" class="last-name" id="last-name" />
<input value="myCity" class="address" id="address" />

Задание 4

Выведите в alert эти value с помощью JS

Шаг 1: Поиск элементов на странице

index.js
// определяем переменные
var lastNameId;
var lastNameEl;
 
var addressId;
var addressEl;
 
// присваиваем переменным строки-`id, которые нужно найти в html
lastNameId = 'last-name';
addressId = 'address;
 
// находим элемент по id и присваиваем результат (найденный элемент) переменным
var lastNameEl = document.getElementById('last-name');
var addressEl = document.getElementById('address');
📌

Можно и нужно объединять объявление переменной и присвоение ей значения в одну строку для сокращения кода и улучшения его восприятия.

var lastNameId = 'last-name';

Шаг 2: Выводим значения value в alert

index.js
window.alert(lastNameEl.value)
window.alert(addressEl.value)
⚠️

Функция alert() полностью останавливает выполнение кода и работу браузера до тех пор, пока пользователь не нажмёт "ОК".

Рефакторинг 🧹

Сначала объявляем все переменные, потом инициализируем, потом выполняем действия. Это делает код более читаемым.

Задание 5

Добавьте в HTML тэг select, в качестве опций (option) которого сделайте список городов: Kiev, Minsk, Moscow.

index.html
<select id="cities">
  <option>Kiev</option>
  <option>Minsk</option>
  <option>Moscow</option>
</select>

Задание 6

Для option со значением "Minsk" добавьте атрибут selected (Minsk будет сразу выбран\селектнут в этом списке)

index.html
<select id="cities">
  <option>Kiev</option>
  <option selected>Minsk</option>
  <option>Moscow</option>
</select>

Чтобы один из пунктов (option) был выбран по умолчанию при загрузке страницы, ему добавляется атрибут selected.

Задание 7

Найдите этот select с помощью JS и выведите в alert его value (обратите внимание, что атрибута value у тэга select не существует, но у его "души", найденной через JS, такое свойство есть).

index.js
var citiesId = "cities"
var citiesEl = document.getElementById(citiesId)
window.alert(citiesEl.value)

Задание 8

Сделайте вывод для себя, чему оно будет равно (значение value тэга select равно выбранной (селектнутой) в данный момент опции)

Хотя у тега select нет атрибута value, у его JS-объекта такое свойство есть. Оно всегда содержит текст текущего выбранного option.

Задание 9

Добавьте на страницу textarea, заполните его внутренность (innerHTML) коротким предложением, перечислив своё хобби.

index.html
<textarea id="hobbies">JS, CSS, HTML</textarea>

Задание 10

Найдите с помощью JS этот textarea на странице и выведите в alert его value (обратите внимание, что атрибута value у тэга textarea не существует, но у его "души", найденной через JS, такое свойство есть).

index.js
var hobbiesId = "hobbies"
var hobbiesEl = document.getElementById(hobbiesId)
window.alert(hobbiesEl.value)

Аналогично select, у JS- объекта тэга textarea, есть свойство value, которое содержит весь текст, находящийся внутри тега.

Задание 11

Делаем вывод, что в JS, value у найденного объекта textarea равно его innerHTML (то есть содержимому между открывающим и закрывающимся телом)

Для textarea значения свойств .value и .innerHTML, по сути, идентичны.

Задание 12

Добавьте на страницу div, внутри него картинку img, атрибут src которого равен ссылке на вашу аватарку из интернета (например BK)

index.html
<div><img src="адрес_ссылки" /></div>

Задание 13

Найдите этот div с помощью JS и алертните его значение value. Что видим? Делаем вывод: у "души" div-элемента нет свойства value (атрибута value у div-а тоже нет, так как див не является тэгом для ввода данных, это просто обёртка-контейнер для других тэгов).

index.html
// добавляем id
<div id="avatar-wrapper">
  <img src="адрес_ссылки" />
</div>
index.js
var avatarWrapperId = "avatar-wrapper"
var avatarWrapperEl = document.getElementById(avatarWrapperId)
window.alert(avatarWrapperEl.value) // Возвращает undefined

При попытке получить div.value мы получаем undefined.

Задание 14

❗ Запомните. value есть только у элементов, с помощью которых можно вводить данные (впечатывать, выбирать) с UI: input, select, textarea

div — это структурный элемент, а не элемент для ввода данных. Его основная задача — группировать другие элементы для стилизации (с помощью CSS) или для манипуляций (с помощью JavaScript). Сам по себе он не несет семантического смысла и не предназначен для взаимодействия с пользователем.


Свойство value предназначено именно для получения данных, введенных пользователем, поэтому для div оно не определено. Вместо этого, чтобы получить содержимое div, используется свойство innerHTML, которое возвращает всю HTML-разметку, находящуюся внутри него.

Задание 15

Выведите в alert свойство innerHTML у найденного дива (по аналогии с value и className)

index.js
window.alert(avatarWrapperEl.innerHTML)

Задание 16

Выведите в alert innerHTML найденного ранее textarea. Делаем вывод, что textarea.innerHTML == textarea.value

index.js
window.alert(hobbiesEl.innerHTML)

В отличие от input, который является одиночным тегом и хранит свое значение в атрибуте value, textarea — это парный тег. Это означает, что у него есть открывающий (<textarea>) и закрывающий (</textarea>) теги. Текст, который вводит пользователь или который задан по умолчанию, находится между этими тегами.

innerHTML — это свойство, которое содержит всё, что находится между открывающим и закрывающим тегами элемента. Для textarea это как раз и будет тот самый текст, который в него введен.

Задание 17

Выведите в alert innerHTML найденного ранее тэга select (увидим его внутренности: список из option, увидим мы именно html-код)

index.js
window.alert(citiesEl.innerHTML)

Задание 18

Найдите добавленную ранее img и выведите в alert значение свойств src и alt (добавьте атрибут alt для картинки)

index.html
<div id="avatar-wrapper">
  <img src="адрес_ссылки" id="avatar" alt="аватар" /> // добавляем картинке alt и id
</div>
index.js
var avatarId = "avatar"
var avatarEl = document.getElementById(avatarId)
window.alert(avatarEl.src)
window.alert(avatarEl.alt)

Боевой маршрут (JS Ваще с нуля)

Видеоурок - 9 видео из 29