ostapenkonataliia 2 years ago
parent
commit
08e8fa2b77
7 changed files with 514 additions and 183 deletions
  1. 19 19
      .idea/workspace.xml
  2. 6 6
      Js_04/JS.js
  3. 1 1
      Js_05/js.js
  4. 2 41
      Js_08/index.html
  5. 117 116
      Js_08/js.js
  6. 28 0
      Js_09/index.html
  7. 341 0
      Js_09/js.js

+ 19 - 19
.idea/workspace.xml

@@ -2,14 +2,13 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="c45bf7d2-992f-400a-8194-6f236ee5f805" name="Changes" comment="">
-      <change afterPath="$PROJECT_DIR$/Js_07/index.html" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/Js_07/js.js" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/Js_09/index.html" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/Js_09/js.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Js_01/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_01/js.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Js_02/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_02/js.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Js_04/JS.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_04/JS.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Js_05/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_05/js.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Js_06/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/Js_06/index.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Js_06/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_06/js.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Js_08/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/Js_08/index.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Js_08/js.js" beforeDir="false" afterPath="$PROJECT_DIR$/Js_08/js.js" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -20,8 +19,8 @@
     <option name="RECENT_TEMPLATES">
       <list>
         <option value="CSS File" />
-        <option value="JavaScript File" />
         <option value="HTML File" />
+        <option value="JavaScript File" />
       </list>
     </option>
   </component>
@@ -37,19 +36,19 @@
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;DefaultHtmlFileTemplate&quot;: &quot;HTML File&quot;,
-    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
-    &quot;last_opened_file_path&quot;: &quot;C:/A-Level/JS/Js 02&quot;,
-    &quot;list.type.of.created.stylesheet&quot;: &quot;CSS&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;settings.editor.selected.configurable&quot;: &quot;project.propVCSSupport.DirectoryMappings&quot;,
-    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "DefaultHtmlFileTemplate": "HTML File",
+    "RunOnceActivity.OpenProjectViewOnStart": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "WebServerToolWindowFactoryState": "false",
+    "last_opened_file_path": "C:/A-Level/Mark up",
+    "list.type.of.created.stylesheet": "CSS",
+    "nodejs_package_manager_path": "npm",
+    "settings.editor.selected.configurable": "project.propVCSSupport.DirectoryMappings",
+    "vue.rearranger.settings.migration": "true"
   }
-}</component>
+}]]></component>
   <component name="RecentsManager">
     <key name="MoveFile.RECENT_KEYS">
       <recent name="C:\A-Level\JS" />
@@ -83,6 +82,7 @@
       <workItem from="1668117208152" duration="114564000" />
       <workItem from="1668934156041" duration="2171000" />
       <workItem from="1668936521847" duration="15558000" />
+      <workItem from="1669205144329" duration="48636000" />
     </task>
     <servers />
   </component>

+ 6 - 6
Js_04/JS.js

@@ -108,12 +108,12 @@
 
 //9.  Confirm: if this days
 // Сделать тоже самое с помощью if.
-{
-    let shopping = confirm("Шопинг???");
-    if (!shopping) {
-        alert("Ты бяка :(");
-    }
-}
+// {
+//     let shopping = confirm("Шопинг???");
+//     if (!shopping) {
+//         alert("Ты бяка :(");
+//     }
+// }
 
 //10.  Default: or
 // Попросите пользователя ввести ФИО в три разныe переменныe. Используя ИЛИ || добавьте строки по умолчанию, которые

+ 1 - 1
Js_05/js.js

@@ -252,7 +252,7 @@
     document.write(str)
 }*/
 
-//23. For Multiply Table +- подсветка
+//23. For Multiply Table +
 // Выведите таблицу умножения 5x5 из задания Multiply table в таблицу, используя вложенные for .... of и document.write
 //Сделайте черезстрочную подсветку - задавайте четным строкам один цвет фона, нечетным - другой
 /*{

+ 2 - 41
Js_08/index.html

@@ -6,57 +6,18 @@
 
 </head>
 <body>
-<!--
-    <script>
-        fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
-            .then(data => {
-                    let currencyFrom = document.createElement("select");
-                    currencyFrom.id = 'from'
-                    document.body.prepend(currencyFrom);
-
-                    let currencyTo = document.createElement("select");
-                    currencyFrom.id = 'to'
-                    document.body.prepend(currencyTo);
-
-
-
-                    const numberInput = document.getElementById('amount')
-                    numberInput.type  = 'number'
-                    numberInput.value = '100'
-                    numberInput.oninput = () => {
-                        console.log('Чесло', numberInput.value)
-                    }
-
-                    for (const [key,rates] of Object.entries(data.rates)) {
-                        console.log(key,rates);
-                        currencyFrom.innerHTML += "<option>" + key + "</option>";
-                        currencyTo.innerHTML += "<option>" + key + "</option>";
-
-                        let course = document.getElementById('rate');
-                        const calcResult = () => {
-                            course.innerHTML = rates / 2;
-                        }
-                        calcResult()
-                    }
-                }
-            )
-    </script> -->
 
 <!-- closure calc 2  -->
 
 <select id='from'> </select>
 <select id='to'> </select>
 <div>
-    <p> Крос курс From <span id="rateFrom">___ </span> </p>
-</div>
-
-<div>
-    <p> Крос курс To <span id="rateTo">___ </span> </p>
+    <p> Крос курс <span id="rate"> ___ </span> </p>
 </div>
 
 <input type='number' id='amount' />
 <div>
-    <p > Результат <span id="result">___ </span> </p>
+    <p> Результат <span id="result"> ___ </span> </p>
 </div>
 
                 <!-- countries and cities -->

+ 117 - 116
Js_08/js.js

@@ -1,29 +1,34 @@
-//1. blocks
-/*let a = 10
-{
-    let b = 20
+//1. blocks +
+/*{
+    let a = 10
     {
-        let c = 30
-        //какие тут будут значения переменных a,b,c,d
+        let b = 20
+        {
+            let c = 30
+            //a === 10, b === 20, c === 30
 
-        b++
-        a *= 10
-    }
-    {
-        let c = 50
-        //какие тут будут значения переменных a,b,c,d
-        b += 500
-    }
-    {
-        const a = 100500
-        const d = "value"
-        //какие тут будут значения переменных a,b,c,d
+            b++
+            a *= 10
+        }
         {
-            let a = -50
-            b     = 1000
-            //какие тут будут значения переменных a,b,c,d
+            let c = 50
+            //a === 100, b === 21, c === 50
+            b += 500
         }
+        {
+            const a = 100500
+            const d = "value"
+            //a === 100500, b === 521, c === нет переменной, d === value
+            {
+                let a = -50
+                b     = 1000
+                debugger;//a === -50, b === 1000, c === нет переменной, d === value
+            }
+            debugger;//a === 100500, b === 1000, c === нет переменной, d === value
+        }
+        debugger;//a === 100, b === 1000
     }
+    debugger;//a === 100
 }
 */
 
@@ -33,28 +38,38 @@
 //  фигурные скобки. Выкиньте лишнее из текущего кода
 /*
 let age = +prompt("Сколько вам лет?","");
-if (age > 6 && age <= 18){
-    alert("школьник");
-}
-else if (age < 0) {
-    alert("ты еще не родился?")
-}
-else if (age > 18 && age < 30){
-    alert("молодеж");
-}
-else if (age > 30 && age < 45){
-    alert("зрелость");
-}
-else if (age > 45 && age < 60){
-    alert("закат");
-}
-else if (age > 60){
-    alert("как пенсия?");
+if (age < 0) {
+    alert("ещё не родился");
 }
 else {
-    alert("то ли киборг, то ли KERNESS");
-}
-*/
+    if (age < 18) {
+        alert("школьник");
+    }
+    else {
+        if (age < 30) {
+            alert("молодеж");
+        }
+        else {
+            if (age < 45) {
+                alert("зрелость");
+            }
+            else {
+                if (age < 60) {
+                    alert("закат");
+                }
+                else {
+                    if (age >= 60) {
+                        alert("как пенсия?");
+                    }
+                    else {
+                        alert("то ли киборг, то ли KERNESS");
+                    }
+                }
+            }
+        }
+    }
+} */
+
 //3. switch: sizes +
 // Сделайте задание Comparison: sizes используя switch
 /*{
@@ -147,7 +162,7 @@ else {
     })
 }  */
 
-//6. closure calc
+//6. closure calc +
 // Напишите внутри анонимной функции, переданной в then (data =>):
 // цикл, который перебирает курсы;
 // на каждой итерации создается кнопка (document.createElement)
@@ -158,24 +173,22 @@ else {
 //
 // Найдите замыкания. Для доступа к валютам из data.rates используйте [], . тут не поможет. Кнопки добавляйте в
 // специальный контейнер (div например), созданный в HTML, или, на худой конец, в body
+/*{
+    fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
+        .then(data => {
+                let button = document.createElement( "button" ) // создаем новый элемент <button>
+                button.innerText = key;
+                document.body.appendChild(button);  // добавляем наш элемент в элемент <body>
 
-/*
-fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
-    .then(data => {
-        for (const [key,value] of Object.entries(data.rates)) {
-            let button = document.createElement( "button" ) // создаем новый элемент <button>
-            button.innerText = key;
-            document.body.append(button);  // добавляем наш элемент в элемент <body>
-
-            button.onclick = () => {
-                let sum = prompt("Введите сумму в выбраной валюте");
-                let result = (sum / value).toFixed(2);
-                alert(`Результат операции ${result} $`)
+                button.onclick = () => {
+                    let sum = prompt("Введите сумму в выбраной валюте");
+                    let result = (sum / value).toFixed(2);
+                    alert(`Результат операции ${result} $`)
+                }
             }
-        }
-        console.log(data) //изучите структуру, получаемую с сервера в консоли
-    })
-*/
+            console.log(data) //изучите структуру, получаемую с сервера в консоли
+        })
+} */
 
 //7. closure calc 2 +
 //Используя заготовку из предыдущего задания, наполните select-ы тэгами option с названиями валют, используя цикл
@@ -187,40 +200,32 @@ fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
 //
 //     Для чтения текущего значения select используйте свойство value: from.value или to.value
 //Создайте HTML файл с :
-
-fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
-    .then(data => {
-
-        for (let [key,value] of Object.entries(data.rates)) {
-            let currencyFromOption = document.createElement('option');
-            let currencyFromSelect = document.getElementById('from');
-
-            currencyFromOption.innerHTML= key;
-            currencyFromSelect.appendChild(currencyFromOption);
-
-            let currencyToOption = document.createElement('option');
-            let currencyToSelect = document.getElementById('to');
-
-            currencyToOption.innerHTML= key;
-            currencyToSelect.appendChild(currencyToOption);
-
-            document.getElementById('from').addEventListener('change', function (){
-                let rateCurrencyFrom = document.getElementById('rateFrom');
-                rateCurrencyFrom.innerHTML = value;
-            })
-
-            document.getElementById('to').addEventListener('change', function (){
-                let rateCurrencyTo = document.getElementById('rateTo');
-                rateCurrencyTo.innerHTML = value;
-            })
-
-        }
-        const amountInput = document.getElementById('amount')
-        amountInput.type  = 'number'
-        amountInput.value = '100'
-
-    })
-
+//
+// fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
+//     .then(data => {
+//         const from = document.getElementById('from');
+//         const to = document.getElementById('to');
+//         const exchangeRate = document.getElementById('rate')
+//         const amount = document.getElementById('amount');
+//         const result = document.getElementById('result');
+//
+//         for (let [rate, course] of Object.entries(data.rates)) {
+//
+//             const optionFrom = document.createElement('option')
+//             const optionTo = document.createElement('option')
+//
+//             optionFrom.innerHTML = optionTo.innerHTML = rate
+//             optionTo.value = optionFrom.value = rate
+//
+//             from.append(optionFrom);
+//             to.append(optionTo);
+//         }
+//
+//         from.onchange = to.onchange = amount.oninput = () => {
+//             exchangeRate.innerHTML = (data.rates[to.value] / data.rates[from.value]).toFixed(3)
+//             result.innerHTML = (data.rates[to.value] / data.rates[from.value] * amount.value).toFixed(2)
+//         }
+//     })
 
 //8. countries and cities
 //По аналогии с предыдущем заданием, реализуйте интерфейс выбора страны и города:
@@ -230,33 +235,29 @@ fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
 // удаляет старый контент select#cities (достаточно занести в innerHTML или innerText пустую строку)
 // добавляет в select#cities элементы option с городами из выбранной только что страны.
 // Таким образом, при изменении страны будет меняться список городов в select#cities
-/*
 {
-fetch('https://raw.githubusercontent.com/russ666/all-countries-and-cities-json/master/countries.min.json').then(res => res.json())
-    .then(data => {
+    fetch('https://raw.githubusercontent.com/russ666/all-countries-and-cities-json/master/countries.min.json').
+    then(res => res.json())
+        .then(data => {
 
-            for  (let key in data) {
-                let countryOption = document.createElement('option');
-                let countrySelect = document.getElementById('countrySelect');
+            const countries = document.getElementById('countrySelect');
+            const cities = document.getElementById('citySelect')
 
-                countryOption.innerHTML = key;
-                countrySelect.append(countryOption);
-        }
-
-         document.getElementById('countrySelect').addEventListener('change', function () {
-             let cities = data[this.value];
-             //citySelect.length = 0;
-             console.log(cities);
-
-             for (const iterator of cities) {
-                 let cityOption = document.createElement('option');
-                 let citySelect = document.getElementById('citySelect');
+            for (country in data){
+                const optionCounty = document.createElement('option')
+                optionCounty.innerText = optionCounty.value = country
+                countries.append(optionCounty)
+            }
 
-                 cityOption.innerHTML = iterator;
-                 citySelect.append(cityOption)
+            countries.onchange = () => {
+                cities.innerText = ''
+                for (city of data[countries.value]){
+                    const optionCity = document.createElement('option')
+                    optionCity.innerText = optionCity.value = city
+                    cities.append(optionCity)
 
-             }
-         })
-     })
-} */
+                }
+            }
+        })
+}
 

+ 28 - 0
Js_09/index.html

@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+<style>
+    table {
+        border-collapse: collapse;
+    }
+    td {
+        width: 30px;
+        height: 30px;
+        border: 1px solid black;
+        padding: 4px;
+        text-align: center;
+    }
+    .highlight {
+        background:lightgreen;
+    }
+</style>
+
+<table id = "table"> </table>
+<script src="js.js"></script>
+</body>
+</html>

+ 341 - 0
Js_09/js.js

@@ -0,0 +1,341 @@
+// ДЗ: Циклы
+
+//1.  while confirm +
+// Сделайте цикл с confirm, который продолжается по Отмена и заканчивается по ОК.
+/*{
+     let i = 0;
+    while (confirm("Введите что-то") === false) {
+        i++
+    }
+} */
+
+//2.  array fill +
+// Создайте пустой массив и добавляйте в него элементы, пока пользователь не нажмет Отмена в очередном prompt.
+// Используйте push для удобства: push
+/*{
+    const arr = [];
+    let name;
+    while (name = prompt("Введите любое имя")) {
+        arr.push(name);
+    }
+    console.log(arr)
+} */
+
+// 3. array fill nopush +
+// Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу.
+/*{
+    const arr = [];
+    let name;
+    let i =0;
+    while (name = prompt("Введите любое имя")) {
+        arr[i] = name
+        i++;
+    }
+    console.log(arr)
+} */
+
+// 4.  infinite probability +
+// Создайте бесконечный цикл, который прерывается с помощью конструкции break, когда Math.random() > 0.9.
+// Код должен подсчитывать количество итераций и вывести это число с помощью alert.
+// {
+//     let i = 0;
+//     let j = Math.random();
+//         while (j < 0.9) {
+//             j = Math.random()
+//             i++
+//             if (j > 0.9) {
+//                 break
+//         }
+//         }
+//         alert(`Число > 0.9 появилось на ${i} итерации.`)
+// }
+
+//5.  empty loop +
+// Сделайте цикл с prompt, который прерывается по нажатию OK и продолжается по нажатию "Отмена"
+// c пустым телом цикла.
+/*{
+    let i = 0;
+    while (confirm("Введите что-то") === false) {
+    }
+} */
+
+//6.  progression sum +
+// Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7....) используя цикл for.
+// Метод Гаусса не применять, наоборот, сделать максимально наивное решение.
+// {
+//     let x = 0;
+//     for (let i = 1; i < 20; i+=3){
+//         x += i;
+//     }
+//     console.log(`Сумма всех чисел c шагом 3 - ${x}`)
+// }
+
+//7.  chess one line +
+// Сформировать строку " # # # # # " с помощью цикла for. Длина строки может быть четной и нечетной,
+// и указывается в одном месте в коде.
+// {
+//     let x = "#";
+//     for (let i = 0; i < 10; i++){
+//         x += " #";
+//     }
+//     console.log(x)
+// }
+
+// 8.  numbers +-
+// Сформировать строку c помощью вложенных циклов. Для перевода строки используйте \n.
+//
+// 0123456789
+// 0123456789
+// 0123456789
+// 0123456789
+// 0123456789
+// 0123456789
+// 0123456789
+// 0123456789
+// 0123456789
+// 0123456789
+/*{
+    for (let i=0;i<9;i++){
+        let str = "";
+        for (let j=0;j<10;j++){
+            str += j;
+        }
+        console.log(str);
+    }
+}*/
+
+// 9. chess +
+// Сформируйте строку с шахматной доской из вложенных циклов. Для перевода строки используйте \n. Код
+// должен поддерживать легкое изменение размеров доски.
+//
+// .#.#.#.#.#.#
+// #.#.#.#.#.#.
+// .#.#.#.#.#.#
+// #.#.#.#.#.#.
+// .#.#.#.#.#.#
+// #.#.#.#.#.#.
+// .#.#.#.#.#.#
+// #.#.#.#.#.#.
+// .#.#.#.#.#.#
+// #.#.#.#.#.#.
+// {
+//     let res = ""
+//
+//     for (let q=0; q<10; ++q) {
+//         let line = ""
+//
+//         for (let w=0; w<10; ++w) {
+//             line += q+w & 1 ? "#" : "."
+//         }
+//         res += line + "\n"
+//     }
+//     console.log(res)
+// }
+
+// 10. cubes +
+// Сформируйте массив из N элементов, содержащий в себе кубы индексов, т. е:
+//
+// [0,1,8,27,64...]
+// {
+//     let arr = [];
+//     let a = 1;
+//     for (let i=0; i<10; i++) {
+//         a = i * i * i;
+//         arr.push(a)
+//     }
+//     console.log(arr)
+// }
+
+// 11. multiply table
+// C помощью вложенного цикла сформируйте массив массивов "таблица умножения".
+// Для инициализации вложенных массивов используйте
+// arr[i] = [] //в i-тый элемент массива заносится новый пустой массив
+// arr[5][6] должен быть равен, соответственно, 30, arr[7][2] == 14 и так далее.
+
+
+// 12. read array of objects
+// Напишите функцию readArrayOfObjects, которая циклически добавляет в массив объекты, которые ввел пользователь.
+// Пользователь вводит ключи и значения (их в каждом объекте может быть любое количество), используя prompt.
+// Когда пользователь нажимает "Отмена" в окне prompt, ввод объекта заканчивается и объект добавляется в массив.
+// Перед вводом следующего объекта пользователю задается вопрос (используя confirm), хочет ли он продолжить это мучение
+// ввод объектов. При утвердительном ответе, опять работает ввод любюго количества ключей для создания нового объекта
+// Функция должна возвращать созданный массив с объектами.
+
+// const result = () => {
+//     let arr = [];
+//     let key, property, ask;
+//     while (ask = confirm("Создадим объект")) {
+//         while (ask === true) {
+//             let obj = {};
+//             obj[prompt("Введите ключ")] = prompt('Введите значение для ключа');
+//             console.log(obj)
+//         }
+//     }
+// }
+// result()
+
+
+// 13. ромбик +
+// Сформировать следующую строку - ромбик:
+//
+// .....#.....
+// ....###....
+// ...#####...
+// ..#######..
+// .#########.
+// ###########
+// .#########.
+// ..#######..
+// ...#####...
+// ....###....
+// .....#.....
+
+// let n = 10
+//
+//     for(let i=1; i<=n; i++){
+//         let str='';
+//
+//         for(let j=n-i; j>0; j--){
+//             str+=' ';
+//         }
+//
+//         for(let j=1; j<=i*2-1; j++){
+//             str+='#';
+//         }
+//         console.log(str);
+//     }
+//
+//     for (let i=2; i<=n; i++){
+//         let str='';
+//
+//         for (let j=0; j<i-1; j++){
+//             str+=' ';
+//         }
+//         for (let j=(n-i)*2+1; j>0; j--){
+//             str+='#';
+//         }
+//         console.log(str);
+//     }
+
+
+
+// 14. DOM: multiply table +
+// Сделать таблицу умножения, используя DOM createElement и innerText. Создайте таблицу, вложенные строки и ячейки
+// в циклах. Должно получится что-то вроде этого:
+// {
+//     let table = document.getElementById("table");
+//     document.body.append(table);
+//
+//     for (let i = 1; i < 10; i++) {
+//         let tr = document.createElement("tr");
+//         table.appendChild(tr);
+//         if (i % 2 === 0) {
+//             tr.style.backgroundColor = 'lightgrey';
+//         }
+//         for (let j = 1; j < 10; j++) {
+//             let td = document.createElement("td");
+//             tr.appendChild(td);
+//             td.innerText = i * j;
+//             table.style.width = '30%';
+//             table.style.border = 'black 2px'
+//         }
+//     }
+// }
+
+
+// const table = document.getElementById('table');
+//
+// for (let i = 0; i < 10; i++){
+//     let tr = document.createElement('tr');
+//     if (i % 2 === 1) {
+//              tr.style.backgroundColor = 'lightgrey';
+//          }
+//     for (let j = 0; j < 10; j++){
+//         const td = document.createElement('td');
+//         let value = i * j;
+//         if (value === 0) {
+//             value = i || j;
+//         }
+//         td.innerHTML = value;
+//         tr.appendChild(td);
+//     }
+//     table.appendChild(tr);
+// }
+
+// 15 DOM: highlight cell
+// Подсветить ячейку, над которой находится курсор мыши. Используйте события mouseover и mouseout,
+// и style.backgroundColor для подсветки. Для того, что бы подсветить правильную ячейку, добавьте обработчики событий
+// во вложенный цикл, и используйте в них ту переменную, которая хранит <td>. В таком случае замыкания вам помогут.
+// Внимание: :hover это читерство :-)
+//
+// const table = document.getElementById('table');
+//
+// for (let i = 0; i < 10; i++){
+//     let tr = document.createElement('tr');
+//     if (i % 2 === 1) {
+//              tr.style.backgroundColor = 'lightgrey';
+//          }
+//     for (let j = 0; j < 10; j++){
+//         const td = document.createElement('td');
+//         let value = i * j;
+//         if (value === 0) {
+//             value = i || j;
+//         }
+//         td.innerHTML = value;
+//         tr.appendChild(td);
+//     }
+//     table.appendChild(tr);
+// }
+//
+// table.onmouseover = function(event) {
+//     let target = event.target;
+//     target.style.background = 'lightblue';
+// };
+//
+// table.onmouseout = function(event) {
+//     let target = event.target;
+//     target.style.background = '';
+// };
+
+// 16. DOM: Highlight cross
+// Подсветить строку и столбец, в которой находится подсвеченная ячейка. Если у вас обработчики событий объявлены во
+// вложенном цикле, то вы можете пользоваться счетчиками цикла (обычно i и j) и другими переменными, например
+// переменной, содержащей в себе DOM-элемент строки.
+//
+// const table = document.getElementById('table');
+//
+// for (let i = 0; i < 10; i++){
+//     const row = document.createElement('tr');
+//     for (let j = 0; j < 10; j++){
+//         const col = document.createElement('td');
+//         let val = i * j;
+//         if (val === 0) {
+//             val = i || j;
+//         }
+//         col.innerHTML = val;
+//         row.appendChild(col);
+//     }
+//     table.appendChild(row);
+// }
+//
+// table.onmouseover = function(event) {
+//     let target = event.target;
+//     target.style.background = 'pink';
+//
+//     document.querySelectorAll(".highlight").forEach(
+//         item => item.classList.remove("highlight")
+//     );
+//     target.closest("tr").classList.add("highlight");
+//     target.closest("table").querySelectorAll("tr").forEach(
+//         row => row.cells[target.cellIndex].classList.add("highlight")
+//     );
+// };
+//
+// table.onmouseout = function(event) {
+//     let target = event.target;
+//     target.style.background = '';
+//
+//     document.querySelectorAll(".highlight").forEach(
+//         item => item.classList.remove("highlight")
+//     );
+// };