index.html 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <link rel="stylesheet" href="style.css">
  8. <title>Document</title>
  9. </head>
  10. <body>
  11. <script>
  12. function buttonVisionText(button, element, innertext) {
  13. element.innerText = innertext
  14. button.innerText = 'Скрыть'
  15. button.onclick = () => buttonHidetext(button, element, innertext)
  16. }
  17. function buttonHidetext(button, element, innertext) {
  18. element.innerText = ""
  19. button.innerText = 'Показать'
  20. button.onclick = () => buttonVisionText(button, element, innertext)
  21. }
  22. function jsonToTable(parent = document.body, jsonObj){
  23. const jsonTable = document.createElement('table') //Создаём и добавляем в родительский єлемент будущую таблицу
  24. parent.append(jsonTable)
  25. for (const key in jsonObj){
  26. const tr = document.createElement('tr') //одно свойтсво - одна строка
  27. jsonTable.append(tr)
  28. const tdProperty = document.createElement('td') //столбик со свойствами обьекта
  29. tr.append(tdProperty)
  30. tdProperty.innerText = key
  31. const tdValue = document.createElement('td') // столбик со значениями свойств обьекта JSON
  32. tr.append(tdValue)
  33. let regexp = /^\s*https?:\/\/./i; //тут проверяем является ли значение ссылкой
  34. if ( regexp.test(jsonObj[key]) ) {
  35. const button = document.createElement('button') // если да то создаём кнопку, текст изначально скрыт
  36. tdValue.append(button)
  37. button.innerText = 'Показать'
  38. let value
  39. //при первом нажатии получаем данные по ссылке, сохраняем в value и выводим
  40. button.onclick = () => {
  41. fetch(jsonObj[key])
  42. .then(res => res.text())
  43. .then(txt => {
  44. tdValue.innerText = txt
  45. button.innerText = 'Cкрыть'
  46. button.onclick = () => buttonHidetext(button, tdValue, txt)
  47. })
  48. }
  49. }else{
  50. tdValue.innerText = jsonObj[key] //если значение не является ссылкой, запихиваем занчение в innertext
  51. }
  52. }
  53. }
  54. fetch('https://swapi.dev/api/people/1/')
  55. .then(res => res.json())
  56. .then(jsonObj => jsonToTable(document.body, jsonObj))
  57. </script>
  58. </body>
  59. </html>