NOT_FOUND_ERR: Исключение DOM 8 – JavaScript

Мой код:

function SubmitCommentAJAX(i)
{
    var thecomment = i.parentNode.getElementsByClassName("styled")[0].innerHTML; 
    var commentBox = document.body.getElementsByClassName("commentsScroll")[0];
    var request = "http://localhost:8080/ituned.com/index?Event=Comment&PostTitle=<%=p.getTitle()%>&PostOwner=<%=p.getUsername_of_Owner()%>&comment="+thecomment;

    xmlhttp.open("POST",request,true);
    xmlhttp.send();
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {            
            var response=xmlhttp.responseXML.getElementsByTagName("theComment")[0].text;
            **commentBox.insertBefore(response, commentBox.firstChild);**
        }
    };
}

HTML:

<div class="commentsScroll" align="left"> 
    <div></div>             
    </div> 
</div>

Я получаю сообщение об ошибке: NOT_FOUND_ERR: DOM Exception 8 для строки commentBox.insertBefore(response, commentBox.firstChild);

Но commentBox хорошо определен, потому что когда я проверяю с помощью alert(commentBox), он показывает мне объект.

В чем ошибка?


person Community    schedule 12.02.2013    source источник
comment
Вы пытались использовать textContent вместо text?   -  person Musa    schedule 13.02.2013
comment
нет, дело не в том, что я пробовал. спасибо в любом случае.   -  person    schedule 13.02.2013
comment
@Vlenorroia Что такое response? Это узел DOM? Если это строка, то вы неправильно используете insertBefore, и ваш вопрос является дубликатом javascript appendChild не работает и Uncaught Error: NOT_FOUND_ERR: исключение DOM 8 для вызова appendChild   -  person apsillers    schedule 13.02.2013


Ответы (1)


insertBefore принимает узел dom, поэтому вам придется преобразовать текст в текстовый узел

var response=xmlhttp.responseXML.getElementsByTagName("theComment")[0].textContent;
commentBox.insertBefore(document.createTextNode(response), commentBox.firstChild);
person Musa    schedule 12.02.2013
comment
ты был действительно прав!! но раньше вы не поставили createtextnode, поэтому он не работал. спасибо! - person ; 13.02.2013
comment
Недопустимыми аргументами для insertBefore являются не только строки, но и одноэлементные массивы, содержащие DOM-узел. Почему я думал, что splice не всегда возвращает массив? :-) - person John Dvorak; 21.08.2013