index.js 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*fetch basic
  2. Исследуйте сайт swapi.dev, рассмотрите JSON-ы, которые предоставляются этим сервисом (например: https://swapi.dev/api/people/1/, https://swapi.dev/api/people/2/, https://swapi.dev/api/starships/12/
  3. С помощью следующего кода считать и вывести информацию о Люке Скайвокере:
  4. fetch('https://swapi.dev/api/people/1/')
  5. .then(res => res.json())
  6. .then(luke => console.log(luke))
  7. Напишите функцию для отображения любого JSON в форме таблицы. Функция должна принимать два параметра:
  8. DOM - элемент, в котором строится таблица
  9. JSON, который нужно отобразить.*/
  10. {
  11. function jsonToTable(parent = document.body, jsonObj){
  12. const jsonTable = document.createElement('table') //Создаём и добавляем в родительский єлемент будущую таблицу
  13. parent.append(jsonTable)
  14. for (const key in jsonObj){
  15. const tr = document.createElement('tr') //одно свойтсво - одна строка
  16. jsonTable.append(tr)
  17. const tdProperty = document.createElement('td') //столбик со свойствами обьекта
  18. tr.append(tdProperty)
  19. tdProperty.innerText = key
  20. const tdValue = document.createElement('td') // столбик со значениями свойств обьекта JSON
  21. tr.append(tdValue)
  22. tdValue.innerText = jsonObj[key]
  23. }
  24. }
  25. fetch('https://swapi.dev/api/people/1/')
  26. .then(res => res.json())
  27. .then(jsonObj => jsonToTable(document.body, jsonObj))
  28. }
  29. /* fetch improved
  30. Расширить функцию отображения:
  31. Если одно из полей строка или массив.
  32. Если строки или строка содержат в себе https://swapi.dev/api/
  33. То выводить вместо текста строки кнопку, при нажатии на которую:
  34. делается fetch данных по этой ссылке
  35. функция отображения запускает сама себя(рекурсивно) для отображения новых данных в том же элементе.*/
  36. {
  37. function buttonVisionText()
  38. function jsonToTable(parent = document.body, jsonObj){
  39. const jsonTable = document.createElement('table') //Создаём и добавляем в родительский єлемент будущую таблицу
  40. parent.append(jsonTable)
  41. for (const key in jsonObj){
  42. const tr = document.createElement('tr') //одно свойтсво - одна строка
  43. jsonTable.append(tr)
  44. const tdProperty = document.createElement('td') //столбик со свойствами обьекта
  45. tr.append(tdProperty)
  46. tdProperty.innerText = key
  47. const tdValue = document.createElement('td') // столбик со значениями свойств обьекта JSON
  48. tr.append(tdValue)
  49. let regexp = /^\s*https?:\/\/./i; //тут проверяем является ли значение ссылкой
  50. if ( regexp.test(jsonObj[key]) ) {
  51. const button = document.createElement('button')
  52. tdValue.append(button)
  53. button.innerText = 'Показать'
  54. button.onclick = () => { fetch(jsonObj[key])
  55. .then(res => res.text())
  56. .then(txt => {
  57. tdValue.innerText = txt
  58. button.innerText = 'скрыть'
  59. })}
  60. }else{
  61. tdValue.innerText = jsonObj[key] //если не является запихиваем занчение в innertext
  62. }
  63. }
  64. }
  65. fetch('https://swapi.dev/api/people/1/')
  66. .then(res => res.json())
  67. .then(jsonObj => jsonToTable(document.body, jsonObj))
  68. }
  69. const value = 'nhfnfnfn'
  70. const td = document.createElement('td')
  71. const button = document.createElement('button')
  72. button.innerText = 'Показать'
  73. function buttonVisionText(element, text) {
  74. }
  75. function buttonHidetext()