insertBefore
HTMLではなくDOMノードを取ります。
代わりにこれを行ってください:
var form = document.getElementsByClassName('commentresponse')[0],
newcomment = document.createElement('div');
newcomment.innerHTML = '<span></span><span><p class="author">'+author+'</p><p class="content">'+comment+'</p></span>';
form.parentNode.insertBefore(newcomment, form);
、、を含む文字列として、エスケープauthor
して、を台無しにします。comment
'<'
'>'
'&'
完全を期すために、DOMノードを使用して完全に実行する方法を次に示します(使用せずにinnerHTML
-このようなことを実行することは、現代のWebでは失われた芸術のようですが)。
var form = document.getElementsByClassName('commentresponse')[0],
newcomment = document.createElement('div'),
el, el2;
newcomment.appendChild(document.creatElement('span'));
el = document.createElement('span');
el2 = document.createElement('p');
el2.className = 'author';
el2.appendChild(document.createTextNode(author));
el.appendChild(el2);
el2 = document.createElement('p');
el2.className = 'content';
el2.appendChild(document.createTextNode(content));
el.appendChild(el2);
newcomment.appendChild(el);
form.parentNode.insertBefore(el, form);
author
とcontent
はテキストノードとして明示的に追加されるため、この方法をエスケープする必要はありません。