2017-02-16 2 views
0

Я пытаюсь добавить текстовые элементы в список из массива значений, хранящихся в объекте.Не удалось выполнить ошибку appendChild при добавлении текстового содержимого к элементам в списке

My JS выглядит следующим образом -

var MiFiveLog = function(person) {       

    var ul = document.querySelector('.logged-interactions-list'); 

    for (i = 0; i < person.loggedMessages.length; i++) { 
     var li = document.createElement('li'); 
     var textNode = document.createTextNode(person.loggedMessages[i]); 
     ul.appendChild(textNode); 
    } 
} 

Person конструктор -

Person = function(name) { 
    this.name = name, 
    this.loggedMessages = [] 
} 

выглядит достаточно простой, но сценарий дает мне следующую ошибку консоли

Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.

Bit запутался - был бы признателен за любую помощь.

Спасибо,

+0

Пожалуйста, покажите нам все соответствующий код. Что такое «человек»? И что еще более важно, что такое 'person.loggedMessages [i]', потому что, очевидно, это не «узел», и поэтому его нельзя добавить. Добавьте достаточно кода, чтобы показать рабочий пример, который создает ошибку, которую вы получаете. –

+0

Почему вы создаете элемент 'li' и ничего не делаете с ним? –

+1

Кроме того, вы должны сначала добавить 'textNode' в' li', а затем добавить 'li' в' ul'. Кроме того, вам даже не придется сталкиваться с проблемой явного создания нового 'textNode'. Вы можете просто написать 'li.textContent = person.loggedMessages [i]'. –

ответ

0

Ваш код должен работать, но вы не показали нам, что ваш person выглядит объект, так что, скорее всего, виновником. Если вы посмотрите на мой пример ниже, вы увидите структуру, с которой объект должен быть настроен, чтобы использовать синтаксис: person.loggedMessages[i] в цикле.

Кроме того, вы должны добавить свои текстовые узлы в элементы списка, а не список, а затем элементы списка должны быть добавлены в список.

Наконец, вы можете пропустить явное построение текстового узла (если хотите) и просто использовать свойство textContent.

Смотрите комментарии ниже:

// Here's your object structure, which is OK, but you have to instantiate it 
 
var Person = function(name) { 
 
    this.name = name, 
 
    this.loggedMessages = [] 
 
} 
 

 
// Instantiate the object and populate the array property: 
 
var p2 = new Person("John Doe"); 
 
p2.loggedMessages.push("message 1"); 
 
p2.loggedMessages.push("message 2"); 
 
p2.loggedMessages.push("message 3"); 
 
p2.loggedMessages.push("message 4"); 
 

 
var MiFiveLog = function(person) {       
 

 
    var ul = document.querySelector('.logged-interactions-list'); 
 

 
    for (i = 0; i < person.loggedMessages.length; i++) { 
 
     var li = document.createElement('li'); 
 
     
 
     // You can accomplish this the way you were attempting except that the 
 
     // text nodes should be appended to the list items, not the list: 
 
     //var textNode = document.createTextNode(person.loggedMessages[i]); 
 
     //li.appendChild(textNode); 
 
     
 
     // Or, you can skip the text node and appending it to the list item completely 
 
     // and just insert the text into the list item: 
 
     li.textContent = person.loggedMessages[i] 
 
     
 
     ul.appendChild(li); // The list items should be appended to the unordered list 
 
    } 
 
} 
 

 
MiFiveLog(p2); // Invoke the function and pass it the instance
<ul class="logged-interactions-list"></ul>

+0

Привет - спасибо за ответ. это похоже, что мой конструктор Person виноват - я просто не уверен, где проблема: я могу добавлять сообщения в loggedMessages и запрашивать их через консоль. Если я копирую и вставляю свой цикл for в мой код, он все равно не работает (даже если он работает, когда я запускаю фрагмент кода выше), так что я бы предположил, что мой объект Person виноват. Я включил код с моим оригинальным вопросом. –

+0

@JonK Пожалуйста, покажите код, в котором вы фактически создаете экземпляр 'Person' и заполняете его свойства. –

+0

@JonK Я обновил свой ответ, чтобы показать, что ваш код конструктора создается в экземпляр объекта и настроен. –

Смежные вопросы