2015-09-07 2 views
3
var line = "<p><strong>" + name + ": </strong>" + message.field_message_body.und[0].value + "</p>"; 
console.log(line); 
console.log(document.getElementById("messages")); 

document.getElementById("messages").appendChild(line); 

messages exists and it returnsUncaught TypeError: Не удалось выполнить 'AppendChild' на 'Node': параметр 1 не типа 'узел'

<div id=messages"></div>

Ничто не выглядит пустым, поэтому я не знаю, почему это бросается.

Кто-нибудь не знает, почему это может быть причиной этой ошибки?

+0

попробовать '.appendChild (document.createTextNode (линия))' вместо '.appendChild (строка);' – dandavis

ответ

8

Переменная, которую вы передаете, не является Node, это String. Попробуйте сначала с помощью

var line = document.createElement("p"); 
line.innerHTML = "<strong>" + name + ": </strong>" + message.field_message_body.und[0].value; 
document.getElementById("messages").appendChild(line); 
+0

Yep, обнаружил, что в о времени, которое вы опубликовали. Это работает. Я дам вам момент, когда это позволит мне. –

+0

также убедитесь, что 'name' и' message.field_message_body.und [0] .value' дезинфицированы (то есть убедитесь, что они не уязвимы для XSS) – petrkotek

0

Как об этом:

var line = "<p><strong>" + name + ": </strong>" + message.field_message_body.und[0].value + "</p>"; 
var msgHTML = document.getElementById("messages").innerHTML; 
document.getElementById("messages").innerHTML = msgHTML + line; 
+0

Я не рекомендую это. это приведет к удалению состояний и прослушивателей событий. – Kurkula

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