Lo unico en que puedo pensar es que el error está en algun otro lado, y no en el código que muestras. También lo unico que se me ocurre es pasarte todo el código que estoy utilizando para que lo revises, aquí tienes:
Código HTML:
Ver original
<script type="text/javascript"> function carita(){
var x = document.getElementById('cara').textContent;
switch(x){
case ':(':
document.getElementById('cara').innerHTML = ":)";
alert("triste");
break;
case ':)':
document.getElementById('cara').innerHTML = ":(";
alert("Feliz");
break;
}
alert(x);
}
<div id="cuerpo" onclick="carita()"> <h1>Esto es una prueba con js
</h1>
Pero antes de irlo a probar ten en cuenta que te lo paso con la propiedad "textContent", ya que la estas utilizando, en internet explorer creo que se usa es "innerText", y a diferencia de innerHTML, que funciona en todos, estos dos no devuelven otras etiquetas HTML, solo el texto. Yo generalmente me decanto por utilizar innerHTML, cuando estoy seguro de que solo es texto, pero en tu caso es posible que no sea así y tengas que tener cuidado.
De todos modos, como te dije el código me pareció divertido... te dejo como yo hice el mio, copialo, pégalo en un nuevo archivo, pruebalo y si te funciona compáralo con el que tienes a ver si encuentras el problema en el tuyo
Saludos