This is because you skip items when deleting from a live nodelist .
When you delete an element at index 0, the element that was at index 1 takes index 0, so you do not delete it, since your iteration is already specified at index 1.
Do it like this:
function remove_inputs(){ var elements=document.getElementById('thediv').getElementsByTagName('input'); while(elements.length){ elements[0].parentNode.removeChild(elements[0]); } }
source share