document.createElement() можно и нужно! юзать. Но есть ситуации, когда этот метод не подходит, например если html получаешь ajax-ом.
document.createDocumentFragment() можно использовать в цикле затусовав туда все элементы, а потом один раз replaceChild, вместо множественных insertBefore;
function replace(targetNode, html)
{
var tmpNode = document.createElement('div');
tmpNode.innerHTML = html;
var fragmentNode = document.createDocumentFragment();
while (tmpNode.firstChild) {
fragmentNode.appendChild(tmpNode.firstChild);
}
targetNode.parentNode.replaceChild(fragmentNode, targetNode);
}