¿Por qué lo estaba yo viendo tan complicado?
Código PHP:
<p id="parrafo">
<input type="text" id="caja" value="hola" />
<input type="button" value="cambia" onclick="cambiar()" />
</p>
<script>
var elParrafo=document.getElementById("parrafo");
var esText=true;
function cambiar() {
var cajaVieja=document.getElementById("caja");
var cajaNueva=document.createElement("INPUT");
cajaNueva.type=esText?"password":"text";
esText=!esText;
cajaNueva.value=cajaVieja.value;
elParrafo.replaceChild( cajaNueva, cajaVieja);
cajaNueva.id="caja";
}
</script>
Esto funciona en FF y en IE.
Ahora me voy a meter a transformar un select a radios o checkboxes, a ver qué me sale.