Lo complicado no es ocultar o mostrar una capa, sino que dicha acción sea compatible con todos los navegadores del mercado:
isOPERA = (navigator.userAgent.indexOf('Opera') >= 0)? true : false; isIE = (document.all && !isOPERA)? true : false; isDOM = (document.getElementById && !isIE && !isOPERA)? true : false; function procesa (id) { if (isDOM) { if(document.getElementById(id).style.display=='none') show (id, 'table-row'); else hide (id); } else if (isIE) { if(document.all[id].style.display=='none') show (id, 'table-row'); else hide (id); } return false; } function show (id, displayValue) { if (isDOM) document.getElementById(id).style.display = (displayValue)? displayValue : "block"; else if (isIE) document.all[id].style.display = "block"; } function hide (id) { if (isDOM) document.getElementById(id).style.display = "none"; else if (isIE) document.all[id].style.display = "none"; } if (isDOM || isIE) { document.writeln('<style type="text/css">'); document.writeln('.SubItemRow \{ display: none; \}'); document.writeln('</style>'); }
Primero detecta el tipo de navegador (opera, ie o dom) y despues procesa el estado del elemento id que hayamos pasado por parámetro. Si está oculto lo muestra y viceversa. Para ello hace uso de las funciones show() y hide() definidas más abajo.
Un ejemplo de su uso en HTML es el siguiente:
<a href="" onclick="procesa('micapa'); return false;">cambiar estado</a> <div id="micapa" style="display: none">texto de prueba</div>