Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Ocultar article con JavaScript

Estas en el tema de Ocultar article con JavaScript en el foro de Javascript en Foros del Web. Buenas tardes: Tengo un código HTML en el que, dentro del body existe la siguiente estructura: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < section name ...
  #1 (permalink)  
Antiguo 01/08/2014, 07:44
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Ocultar article con JavaScript

Buenas tardes:

Tengo un código HTML en el que, dentro del body existe la siguiente estructura:

Código HTML:
Ver original
  1. <section name="content" class="content">
  2.    <article name="uno">
  3.    </article>
  4.    <article name="dos">
  5.    </article>
  6.    <article name="tres">
  7.    </article>
  8.  
  9. <a href="#" onclick="visibilidad(\"uno\")">boton 1</a>
  10. <a href="#" onclick="visibilidad(\"dos\")">boton 2</a>
  11. <a href="#" onclick="visibilidad(\"tres\")">boton 3</a>

Quiero hacer una cosa muy sencilla (que ya he programado en varias ocasiones), y es mostrar/ocultar los "article" según si se presiona uno de los botones. Como podéis observar cada botón le pasa a la función (definida abajo) el name del article que se va a mostrar/ocultar.

Todo muy sencillo.

Ahora, la función no me deja obtener el objeto "section":

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.    function visibilidad(name) {
  3.       var section = document.getElementsByName("content"); //Obtengo la sección
  4.       alert(section[0].name); //Quiero imprimir el nombre de la sección (no tiene ninguna utilidad, solo es para hacer la comprobación de que lo he cogido correctamente) y me salta la ventana del "alert" en blanco, es decir, no lo he obtenido
  5.    }
  6. </script>
Una aclaración: Entra correctamente en la función, el problema está en que no almaceno correctamente el objeto en la variable "section" o no imprimo como es debido el "name" en el "alert".

Le he dado mil vueltas, y es evidente que se trata de una tontería pero no lo encuentro.

Un saludo.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...
  #2 (permalink)  
Antiguo 01/08/2014, 10:35
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ocultar article con JavaScript

Para este caso, lo recomendable es acceder al atributo mediante el método getAttribute.

Código Javascript:
Ver original
  1. alert(section[0].getAttribute("name"));

Y pues, supongo que sabes cómo ocultar los artículos, pero de todos modos te dejo un pequeño ejemplo.

Código Javascript:
Ver original
  1. function visibilidad(name) {
  2.     var article = document.getElementsByName(name)[0];    
  3.  
  4.     if (article.offsetHeight){
  5.         article.style.height = 0;
  6.         article.style.opacity = 0;
  7.     }
  8.     else{
  9.         article.style.height = "5em";
  10.         article.style.opacity = 1;
  11.     }
  12. }

De este modo, dejo la altura del artículo en cero y lo hago opaco para darle un efecto visual al cambio de estado, el cual se complementa con la propiedad transition de CSS3, por lo que dicho efecto solo surtirá efecto en aquellos navegadores que den soporte a esta tecnología.

Código CSS:
Ver original
  1. article{
  2.     transition: .7s;
  3. }

Demo

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 01/08/2014, 10:48
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Respuesta: Ocultar article con JavaScript

Muchas gracias, ha funcionado con el método "getAttribute()", sin embargo no funciona como yo quiero la ocultación de un elemento. Te explico:

Tengo el "section" y dentro los "article" tal y como aparecía en mi primer mensaje; el único matiz es que cuando muestre uno de los "article" quiero ocultar los demás, por eso mi idea es este sencillísimo código:

Código Javascript:
Ver original
  1. function mostrar(name){ //En el parámetro tengo el "name" del article que quiero mostrar, por tanto quiero ocultar todos los demás
  2.             var contentSection = document.getElementsByName("content"); //Obtengo una referencia al "section"
  3.             for(i = 0; i < contentSection.elements.length; i++) { //Gracias a contentSection.ELEMENTS debería recorrer todos los "article" que hay dentro del "section"
  4.                 if(contentSection.elements[i].name != name) contentSection.elements[i].style.display = none; //Si no es el que quiero mostrar, lo oculto cancelando su display
  5.                 else contentSection.elements[i].style.display = inline; //Si es el que quiero mostrar lo muestro cambiando el display
  6.             }
  7.         }

Muy sencillo, y después de darle mil vueltas he detectado que la instrucción que no funciona es cuando uso "contentSection.elements.length" y "contentSection.elements[i].name".

Gracias de nuevo. Un saludo.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...
  #4 (permalink)  
Antiguo 01/08/2014, 11:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ocultar article con JavaScript

Noto algunos errores. Intentas asignar los valores 'inline' y 'none' como si se trataran de variables cuando deberían de ser cadenas. Por otro lado, la propiedad elements solo es aplicable en formularios, no en secciones u otros elementos. También debes de tomar en cuenta que el método getElementsByName devuelve una lista de nodos, no devuelve a un solo elemento, por más que solo exista uno con el nombre buscado. En este caso, necesitas especificar el número de elemento a tomar y siendo la sección el único elemento con el nombre 'content' para este ejemplo, debes de añadir un [0] al final de la línea en la que lo tomas, con lo cual especificas que se trata del primer elemento encontrado y que en este caso, también es el único.

Te propongo hacerlo así:

Código Javascript:
Ver original
  1. function visibilidad(name){
  2.     var seccion = document.getElementsByName("content")[0],
  3.         articulos = seccion.getElementsByTagName("article"),
  4.         total = articulos.length;
  5.  
  6.     for (var i = 0; i < total; i++){
  7.         if (articulos[i].getAttribute("name") == name){
  8.             articulos[i].style.opacity = 1;
  9.             articulos[i].style.height = "5em";
  10.         }
  11.         else{
  12.             articulos[i].style.opacity = 0;
  13.             articulos[i].style.height = 0;
  14.         }
  15.     }
  16. }

De este modo, tomo a la sección, luego de tomar a la sección, busco todos los artículos existentes en ella, luego, calculo el total de artículos existentes y los itero con un bucle, en el cual evaluaré el nombre de cada uno de ellos. Si alguno posee el mismo nombre del que se especificó en la búsqueda, se lo muestra, caso contrario, se lo oculta. Nuevamente uso las propiedades opacity y height para darle un efecto visual agradable, pero puedes seguir trabajando con la propiedad display.

Demo

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 01/08/2014, 12:00
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Respuesta: Ocultar article con JavaScript

Eres un maquinote, era eso lo que necesitaba.

Doy el tema por solucionado. Gracias de nuevo y un saludo.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...

Etiquetas: article, html, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:27.