Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] leyendo propiedad de style

Estas en el tema de leyendo propiedad de style en el foro de Javascript en Foros del Web. Hola amigos, tengo este codigo, que aunque funciona no lo hace como debería¿Alguien me puede decir el problema? @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original ...
  #1 (permalink)  
Antiguo 22/12/2016, 06:24
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Pregunta leyendo propiedad de style

Hola amigos,
tengo este codigo, que aunque funciona no lo hace como debería¿Alguien me puede decir el problema?

Código Javascript:
Ver original
  1. <style>
  2. #c1 {position:absolute;left:200px;top:100px;width:100px;border:1px solid #000000;padding:10px;visibility:hidden;}
  3. </style>
  4. <script>
  5. function ver(id) {
  6. var x=document.getElementById(id).style;
  7. x.visibility=(x.visibility=='hidden')?'visible':'hidden';
  8. }
  9. </script>
  10. <button onclick="ver('c1')">capa on/off</button>
  11. <div id="c1">Esta es la capa</div>

El problema es que (al principio)la propiedad visibility no coge su valor del objeto style(es una cadena vacia ''), a partir del 2º click en el boton si lee el valor de la propiedad
__________________
1os pasaos con xAMP en Windows
programando en PERL

Última edición por alfa18; 22/12/2016 a las 06:51
  #2 (permalink)  
Antiguo 22/12/2016, 09:30
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: leyendo propiedad de style

Lo que sucede es que tú defines el valor de la propiedad visibility en la hoja de estilos y pretendes leerlo desde el objeto style el cual solo es capaz de obtener los valores declarados in line, por ejemplo:
Código HTML:
Ver original
  1. <div style="visibility: hidden"></div>

Es preferible utilizar el objeto-propiedad style para establecer valores y no para leerlos. En su lugar, debes utilizar el método .getComputedStyle:
Código Javascript:
Ver original
  1. var visibilidad = getComputedStyle(document.getElementById("c1")).visibility;

Y para navegadores antiguos, como las viejas versiones de Internet Explorer, debes utilizar el método .currentStyle():
Código Javascript:
Ver original
  1. var visibilidad = document.getElementById("c1").currentStyle.visibility;

__________________
«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 22/12/2016, 10:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: leyendo propiedad de style

Supongo que la mejor solucion es combinar hoja y estilo en linea
Código Javascript:
Ver original
  1. <style>
  2. #c1 {position:absolute;left:200px;top:100px;width:100px;border:1px solid #000000;padding:10px}
  3. </style>
  4. ............
  5. .-..............
  6. <div id="c1" style="visibility:hidden">Esta es la capa</div>

Gracias Alexis88
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #4 (permalink)  
Antiguo 22/12/2016, 11:17
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: leyendo propiedad de style

En realidad, lo que se aconseja actualmente es definir los estilos solo en la hoja de estilos. Hacerlo in line es una vieja práctica desaconsejada por su poca practicidad.
__________________
«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 22/12/2016, 14:32
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: leyendo propiedad de style

En mi opinión la manera de hacerlo es con la propiedad classList, el método toggle() y la especifidad en el css
Código Javascript:
Ver original
  1. <!DOCTYPE html>
  2. <html dir="ltr" lang="es-es">
  3.     <head>
  4.         <title></title>
  5.         <meta charset="utf-8">
  6.         <meta name="viewport" content="user-scalable=yes, width=device-width, initial-scale=1">
  7.         <style>
  8.             #c1 {position:absolute;left:200px;top:100px;width:100px;border:1px solid #000000;padding:10px;visibility:hidden;}
  9.             div#c1.mostrar {visibility:visible;}
  10.         </style>
  11.         <script>
  12.             function ver(id) {
  13.                 document.getElementById(id).classList.toggle('mostrar');
  14.             }
  15.         </script>
  16.     </head>
  17.     <body>
  18.  
  19.         <button onclick="ver('c1')">capa on/off</button>
  20.         <div id="c1">Esta es la capa</div>
  21.        
  22.     </body>
  23. </html>
Como la propiedad classList no es soportada por <=IE9 se puede hacer un pequeño polyfill
Código Javascript:
Ver original
  1. if (!('classList' in document.documentElement)) { // IE9, OPERA MINI, ANDROID (2.1 - 2.3), UC BROWSER
  2.  
  3.     Object.defineProperty(Element.prototype, 'classList', {
  4.  
  5.         get: function() {
  6.  
  7.             return {
  8.  
  9.                 elemento: this,
  10.                 selectores: (this.className != null) ? this.className.replace(/^\s+|\s+$/g, '').split(/\s+/g) : [],
  11.                 indice: null,
  12.  
  13.                 toggle: function(selector) {
  14.  
  15.                     this.indice = this.selectores.indexOf(selector);
  16.                     ~this.indice ? this.selectores.splice(this.indice, 1) : this.selectores.push(selector);
  17.                     this.elemento.className = this.selectores.join(' ');
  18.  
  19.                 },
  20.  
  21.                 add: function(selector) {
  22.  
  23.                     this.indice = this.selectores.indexOf(selector);
  24.                     ~this.indice ? '' : this.selectores.push(selector);
  25.                     this.elemento.className = this.selectores.join(' ');
  26.                 },
  27.  
  28.                 remove : function(selector) {
  29.  
  30.                     this.indice = this.selectores.indexOf(selector);
  31.                     ~this.indice ? this.selectores.splice(this.indice, 1) : '';
  32.                     this.elemento.className = this.selectores.join(' ');
  33.                 }
  34.             }
  35.         },
  36.  
  37.         configurable: true,
  38.         writeable: false
  39.     });
  40. }
Si se presta atención, el objeto se genera cada vez que la propiedad es llamada. Aún no he logrado que se genere una sola vez y que luego retorne el objeto generado

Etiquetas: style
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 01:28.