Что не так с этим кодом (он должен немного изменить html-страницу)

Приведенный ниже код должен создать список с содержимым, которое вводит пользователь.

function d_list() {
    let content = prompt()
    let elem;
    elem = '<ul>'
    while (content) {
        content = prompt()
        elem.innerHTML =+ '<li>' + content + '</li>'
    }
    elem =+ '</ul>'
    return elem;
}

let list = d_list()
let div = document.querySelector('.dyn_list')
div.append(list)

Приведенный ниже код должен создать список из заданного объекта ....................................... .....................................................................

    let data = {
        "Рыбы": {
            "форель": {},
            "лосось": {}
        },
        "Деревья": {
            "Огромные": {
            "секвойя": {},
            "дуб": {}
        },
        "Цветковые": {
            "яблоня": {},
            "магнолия": {}
        }
    }
    };

Есть код, который создает список списков ........................................ ...............

    function createTree(container, data) {
        container.innerHTML = '<ul>'

        for (let things in data) {
            things.innerHTML = '<ul>'
            if (things.hasOwnProperty()) {
                for (let t in things) {
                    t.innerHTML = t
                }
        } else {
            things.innerHTML = things
    }
        things.innerHTML += '</ul>'
    }

        container.innerHTML += '</ul>'
    }   

    let container = document.getElementById('container');
    createTree(container, data); 

Ответы (1 шт):

Автор решения: Grundy

В обоих примерах перепутаны места где со строкой производятся действия как с элементом:

  1. elem.innerHTML =+ '<li>' + content + '</li>': elem - это строка, поэтому тут недолжно было быть innerHTML
  2. div.append(list) - так как d_list возвращает строку, а не элемент, вместо .append тут как раз можно было использовать .innerHTML.

В цикле for..in проход идет по ключам, ключами в данном случае могут быть только строки, поэтому и тут

for (let things in data) {

и тут

for (let t in things) {

things и t - являются строками, и как и в предыдущем примере в дальнейшем у них идет обращение к .innerHTML

Вместо этого, необходимо было менять .innerHTML единственного элемента container

→ Ссылка