> window.prompt('Готовы к JS?')
< да
> prompt('Готовы к JS?')
< null
> document.body.style.fontSize = "30px";
// Получаем адрес текущей страницы
> location.hostname
< www.google.com
// Получаем тип операционной системы
> navigator.platform
< "Win32"
// Получаем высоту экрана
> screen.height
< 1080
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Практика JS</title>
<script src="learning.js" defer></script>
</head>
<body>
<h1>Изучаем JS</h1>
</body>
</html>
HTML
├ HEAD
├─ #text
├─ META
├─ #text
├─ META
├─ #text
├─ TITLE
├── #text Практика JS
├─ #text
├─ SCRIPT
└── #text
├ BODY
├─ #text
├─ H1
└── #text Изучаем JS
// Выводим содержимое всей страницы
> document.documentElement
< html
// Выводим потомков узла head
> document.head.childNodes
< NodeList(9) [text, meta, text, meta, text, title, text, script, text]
// Получаем первую дочернюю ноду узла head и выводим ее первого соседа
> document.head.childNodes[0].nextSibling
< meta
for (let node of document.head.childNodes) {
console.log(node);
}
#text
<meta charset="UTF-8">
#text
<meta name="viewport" content="width=device-width, initial-scale=1.0">
#text
<title>Практика CSS</title>
#text
<link rel="stylesheet" href="css/style.css">
#text
// Получаем потомков узла body
> document.body.children
< HTMLCollection(1) [h1]
// Получаем родителя узла body
> document.body.parentElement
< html
// Получаем верхнего соседа узла body
> document.body.previousElementSibling
< head
> document.head instanceof HTMLElement
< true
> document.head instanceof Node
< true
> console.dir(document.body)
< … __proto__: HTMLBodyElement
> document.head.nodeType
< 1
> document.TagName
< undefined
> document.nodeName
< #document
// Содержимое тела документа
> document.body.innerHTML
< <h1>Основные свойства узлов</h1>…
// Содержимое тега <body> вместе с ним самим
> document.body.outerHTML
< "<body>↵ <h1>Осн…
// Внутренний текст всех входящих элементов
> document.body.textContent
< Основные свойства узлов
// Определяем, спрятан ли тег <h1>
> document.body.firstElementChild.hidden
< false
// Прячем тег <h1>
> document.body.firstElementChild.hidden = true
< true
// Получаем содержимое текстового узла (в нашем случае – это перенос строки)
> document.body.firstChild.data
< ↵
// Меняем перенос строки на произвольный текст
> document.body.firstChild.data = 'Текст'
< "Текст"
// Создаем новое свойство
> document.body.myProperty = 'Созданное свойство'
> document.body.myProperty
< "Созданное свойство"
// Проверяем наличие атрибута
> document.body.hasAttribute('layout')
< false
// Задаем новый атрибут
> document.body.setAttribute('layout', 'flexible')
// Получаем свежесозданный атрибут
> document.body.getAttribute('layout')
< "flexible"
// Удаляем атрибут
> document.body.removeAttribute('layout')
> document.body.hasAttribute('layout')
< false
<body data-site="https://yandex.ru/" data-name="Yandex"></body>
document.body.dataset.site
"https://yandex.ru/"
document.body.dataset.name
"Yandex"
<h1 id="first_header">Поиск в дереве документа</h1>
<article class="main_article">Первая статья</article>
<article class="main_article">Вторая статья</article>
<article class="main_article" name="last">Последняя статья</article>
<h1>Основы DOM</h1>
// Выберем заголовок и получим все его содержимое
> document.getElementById('first_header')
< <h1 id="first_header">Поиск в дереве документа</h1>
// Выберем последнюю статью на основании свойства «name»
> document.getElementsByName('last')
< NodeList [article.main_article]
// Найдем все статьи на странице по тегу
> document.getElementsByTagName('article')
< HTMLCollection(3) [article.main_article, article.main_article, article.main_article, last: article.main_article]
// Выведем список статей с классом «main_article»
> document.getElementsByClassName('main_article')
< HTMLCollection(3) [article.main_article, article.main_article, article.main_article, last: article.main_article]
// Получим доступ к первой статье
> document.querySelector('.main_article')
< <article class="main_article">Первая статья</article>
// Представим список всех заголовков первого уровня
> document.querySelectorAll('.main_article')
< NodeList(3) [article.main_article, article.main_article, article.main_article]
<article class="main-article">Основная статья</article>
<p>Некоторый абзац</p>
<section>Дополнительная секция</section>
const text = document.createTextNode('Некоторый текст');
const h1 = document.createElement('h1');
document.body.prepend(text);
document.body.prepend(h1);
h1.append('Заголовок страницы')
const p = document.querySelector('p');
const pModified = p.cloneNode(true);
pModified.innerHTML = '<strong>Новый абзац</strong>'
const section = document.getElementsByTagName('section')[0];
section.after(pModified)
const tags = document.body.children
for (let tag of tags) {
const h2 = document.createElement('h2')
h2.innerText = 'Останутся только заголовки!'
tag.replaceWith(h2)
}
const p = document.querySelector('p');
p.insertAdjacentHTML('beforebegin',
'<a href="https://www.google.com/"><strong>Google</strong></a>');
p.insertAdjacentHTML('afterend',
'<a href="https://yandex.ru/"><strong>Yandex</strong></a>');
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Свойства узлов</title>
<script src="learning.js" defer></script>
<style>
.colored{
color:darkorange;
}
</style>
</head>
<body>
<ul class="colored">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<ul>
<li>А</li>
<li>Б</li>
<li>В</li>
<li>Г</li>
<li>Д</li>
</ul>
</body>
</html>
// Получаем элементы с тегом <ul>
> const uls = document.querySelectorAll('ul')
// Для каждого элемента получаем имя класса
> for (let tag of uls) {
console.log(tag.className)
}
< colored
< ‘’
// Получаем элементы с тегом <ul>
> const uls = document.querySelectorAll('ul');
> for (let tag of uls) {
console.log(tag.classList.contains('colored'));
// Удаляем класс colored для первого списка и наоборот добавляем его для второго
tag.classList.toggle('colored');
console.log(tag.classList.contains('colored'));
}
< true
< false
< false
< true
font-size (CSS) => fontSize (JS).
// Поменяем маркеры на квадраты
> document.querySelector('.colored').style.listStyleType = 'square'
// Увеличим шрифт
> document.querySelector('.colored').style.fontSize = '2rem'
> document.querySelector('.colored').style.cssText = `
list-style-type: "-=- ";
list-style-position: inside;
text-align: center;
> getComputedStyle(document.querySelector('.colored')).display
< block
> getComputedStyle(document.querySelector('.colored')).marginBottom
< 19.2px
> getComputedStyle(document.querySelector('.colored')).backgroundColor
< rgba(0, 0, 0, 0)
<body onclick="console.log('Нажали!')"></body>
function clicked() {
console.log('Нажали!');
}
document.body.onclick = clicked;
function one() {
console.log('Нас тут много');
}
function two() {
console.log('Поверьте!');
}
function three() {
console.log('Спасибо методу addEventListener');
}
main = document.documentElement;
main.addEventListener('click', one);
main.addEventListener('click', two);
main.addEventListener('click', three);
function getCoords(event) {
console.log(event.type);
console.log(event.clientX + 'x' + event.clientY)
}
main = document.documentElement;
main.addEventListener('click', getCoords);
<div>
<h4>Всплытия</h4>
<p><span>Некий текст</span></p>
</div>
function who(event) {
console.log(event.target.tagName);
}
main = document.documentElement;
main.addEventListener('click', who);
for(let tag of document.querySelectorAll('*')) {
tag.addEventListener("click", event => console.log(`Погружаемся вглубь: ${tag.tagName}`), true);
tag.addEventListener("click", event => console.log(`Поднимаемся пузырьком: ${tag.tagName}`));
}
Погружаемся вглубь: HTML
Погружаемся вглубь: BODY
Погружаемся вглубь: DIV
Погружаемся вглубь: H4
Поднимаемся пузырьком: H4
Поднимаемся пузырьком: DIV
Поднимаемся пузырьком: BODY
Поднимаемся пузырьком: HTML
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Обработчик событий</title>
<script src="learning.js" defer></script>
<style>
table {
border: 2px solid blue;
}
td {
background-color: mediumturquoise;
border: 1px solid black;
height: 50px;
width: 200px;
text-align: center;
}
.colored {
background-color:greenyellow;
}
</style>
</head>
<body>
<table>
<tr>
<td>Выбери меня</td>
<td>Или меня</td>
<td>Можно и меня</td>
<td>Лучше меня</td>
</tr>
<tr>
<td>Выбери меня</td>
<td>Или меня</td>
<td>Можно и меня</td>
<td>Лучше меня</td>
</tr>
<tr>
<td>Никого не слушай</td>
<td>Лучше сюда</td>
<td>Я тут главный</td>
<td>Готов?</td>
</tr>
<tr>
<td>Никого не слушай</td>
<td>Лучше сюда</td>
<td>Я тут главный</td>
<td>Готов?</td>
</tr>
</table>
</body>
</html>
let selected;
table = document.querySelector('table')
table.onmouseover = function(event) {
let target = event.target;
if (target.tagName === 'TD') {
highlight(target);
return;
}
};
function highlight(td) {
if (selected) {
selected.classList.remove('colored');
}
selected = td;
selected.classList.add('colored');
}
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Обработчик событий</title>
<script src="learning.js" defer></script>
<style>
#outer {
width: 700px;
height: 500px;
border: 2px solid gold;
background-color:khaki;
position: relative;
overflow: hidden;
cursor: pointer;
}
#inner {
position: absolute;
left: 25px;
top: 30px;
width: 40px;
height: 40px;
transition: all 1.5s;
background-color: mediumblue;
border-radius: 50%;
}
</style>
</head>
<body>
<div id="outer">
<div id="inner"></div>
</div>
</body>
</html>
<a href="e.html">Внутренняя</a>
<a href="https://www.google.com/">Гугл</a>
<a href="https://www.ya.com/">Внешняя</a>
let urls = document.querySelectorAll('a');
for (let url of urls) {
let href = url.getAttribute('href');
if (href.includes('http')) {
url.style.color = 'green';
url.style.textDecoration = 'overline';
}
if (href.includes('google.com')) {
url.style.color = 'red';
url.style.textDecoration = 'underline';
}
}
outer.onclick = function(event) {
let outerCoords = this.getBoundingClientRect();
let innerCoords = {
top: event.clientY - outerCoords.top - outer.clientTop - inner.clientHeight / 2,
left: event.clientX - outerCoords.left - outer.clientLeft - inner.clientWidth / 2
};
if (innerCoords.top < 0) innerCoords.top = 0;
if (innerCoords.left < 0) innerCoords.left = 0;
if (innerCoords.left + inner.clientWidth > outer.clientWidth) {
innerCoords.left = outer.clientWidth - inner.clientWidth;
}
if (innerCoords.top + inner.clientHeight > outer.clientHeight) {
innerCoords.top = outer.clientHeight - inner.clientHeight;
}
inner.style.left = innerCoords.left + 'px';
inner.style.top = innerCoords.top + 'px';
}