index.html 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. </script>
  13. <script>
  14. function buttonVisionText(button, element) {
  15. element.style.display = "block"
  16. button.innerText = 'Скрыть'
  17. button.style.backgroundColor = "SteelBlue"
  18. button.onclick = () => buttonHidetext(button, element)
  19. }
  20. function buttonHidetext(button, element) {
  21. element.style.display = "none"
  22. button.innerText = 'Показать'
  23. button.style.backgroundColor = "darkgrey"
  24. button.onclick = () => buttonVisionText(button, element)
  25. }
  26. function jsonToTable(parent = document.body, jsonObj) {
  27. const jsonTable = document.createElement('table') //Создаём и добавляем в родительский єлемент будущую таблицу
  28. parent.append(jsonTable)
  29. for (const key in jsonObj) {
  30. const tr = document.createElement('tr') //одно свойтсво - одна строка
  31. jsonTable.append(tr)
  32. const tdProperty = document.createElement('td') //столбик со свойствами обьекта
  33. tr.append(tdProperty)
  34. tdProperty.innerText = key
  35. const tdValue = document.createElement('td') // столбик со значениями свойств обьекта JSON
  36. tr.append(tdValue)
  37. //console.log(jsonObj[key])
  38. let regexp = /^\s*https?:\/\/./i; //тут проверяем является ли значение ссылкой
  39. if (regexp.test(jsonObj[key]) && typeof jsonObj[key] === "string") { //если значение ссылка но не массив
  40. const valueDiv = document.createElement('div') //div контейнер внутри ячейки
  41. tdValue.append(valueDiv)
  42. const button = document.createElement('button') // если да то создаём кнопку, текст изначально скрыт
  43. tdValue.append(button)
  44. button.innerText = 'Показать'
  45. //при первом нажатии получаем данные по ссылке, выводим в valueDiv
  46. button.onclick = () => {
  47. fetch(jsonObj[key])
  48. .then(res => res.json())
  49. .then(obj => {
  50. jsonToTable(valueDiv, obj)
  51. button.innerText = 'Cкрыть'
  52. button.style.backgroundColor = "SteelBlue"
  53. button.onclick = () => buttonHidetext(button, valueDiv) //вешаем на кнопку, изменяемый при каждом нажатии, онклик скрывающий или отображающий контент внутри ячейки
  54. })
  55. }
  56. } else if (Array.isArray(jsonObj[key])) {
  57. for (arrayItem of jsonObj[key]) {
  58. console.log(arrayItem)
  59. if (regexp.test(arrayItem) && typeof arrayItem === "string") {
  60. //если значение ссылка и строка
  61. const valueDiv = document.createElement('div') //div контейнер внутри ячейки
  62. tdValue.append(valueDiv)
  63. const button = document.createElement('button') // если да то создаём кнопку, текст изначально скрыт
  64. tdValue.append(button)
  65. button.innerText = 'Показать'
  66. //при первом нажатии получаем данные по ссылке, выводим в valueDiv
  67. button.onclick = () => {
  68. fetch(arrayItem)
  69. .then(res => res.json())
  70. .then(obj => {
  71. jsonToTable(valueDiv, obj)
  72. button.innerText = 'Cкрыть'
  73. button.style.backgroundColor = "SteelBlue"
  74. button.onclick = () => buttonHidetext(button, valueDiv) //вешаем на кнопку, изменяемый при каждом нажатии, онклик скрывающий или отображающий контент внутри ячейки
  75. })
  76. }
  77. } else {
  78. }
  79. }
  80. } else {
  81. tdValue.innerText = jsonObj[key] //если значение не является ссылкой, запихиваем занчение в innertext
  82. }
  83. }
  84. }
  85. fetch('https://swapi.dev/api/people/1/')
  86. .then(res => res.json())
  87. .then(jsonObj => jsonToTable(document.body, jsonObj))
  88. </script>
  89. </body>
  90. </html>