Comunidad de diseño web y desarrollo en internet online

Problemas con document.styleSheets

Citar            
MensajeEscrito el 03 Oct 2011 02:08 am
Hola a todos, el problema que tengo es que cuando quiero leer los atributos definidos en un archivo css externo el valor de selectorText es undefined. Este error se produce solo en Firefox y Opera en los demás exploradores no hay roblema.

Sin embargo el código funciona en todos los exploradores cuando los estilos los defino entre las etiquetas <style></style> en la misma hoja html.

Por favor si alguien sabe como solucionar eso se lo agradeceré.

Hasta luego.

PD: ya me aseguré de que el error no se debe a que ejecuto el código antes de que el archivo css se carge.

Por diego1311

61 de clabLevel



 

Lima - Perú

firefox
Citar            
MensajeEscrito el 03 Oct 2011 12:32 pm
Podrías poner el código exacto que estás usando?

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Oct 2011 03:14 pm

Código Javascript :

function obtenerAtributoCss(obj, atributoCss)
{      
   var estilos=new Array();
   var retorno=null;
   var buscar=true;
   var estilo=document.getElementById(obj).getAttribute('style');
   var clase=document.getElementById(obj).getAttribute('class');   
   
   for (var i=0 ; i<document.styleSheets.length; i++)   
      estilos.push(document.styleSheets[i].rules || document.styleSheets[i].cssRules);   

   if (estilo!=null)   
   {         
      var definiciones;
      if (estilo.indexOf(';')>-1)
         definiciones=estilo.split(';');
      else 
         definiciones=new Array(estilo);
      
      for (var i=0; i<definiciones.length; i++)
      {
         var datos=definiciones[i].split(':');
         var propiedad=datos[0].replace(/^\s*|\s*$/g, '');
         if (propiedad.toLowerCase()==atributoCss)   
         {
            retorno=datos[1].replace(/^\s*|\s*$/g, '');
            buscar=false;
         }
      }
   }
   
   if (buscar && clase!=null)
   {
      var _clase;
      if (clase.indexOf(' ')>-1)
         _clase=clase.split(' ');
      else
         _clase=new Array(clase);

      for (var _i=(_clase.length-1); _i>-1; _i--)
      {
         for (var i=0; i<estilos.length; i++)
         {
            for (var j=0; j<estilos[i].length; j++)
            {
               if(estilos[i][j].selectorText.toLowerCase()=='.'+_clase[_i])
               {                                       
                  if (estilos[i][j].style[atributoCss]!='')
                  {
                     retorno=estilos[i][j].style[atributoCss];
                     buscar=false;
                     _i=-1;                     
                  }
               }
            }
         }
      }
   }
   
   if (buscar)
   {
      for (var i=0; i<estilos.length; i++)
      {
         for (var j=0; j<estilos[i].length; j++)
         {
            if(estilos[i][j].selectorText.toLowerCase()=='#'+obj)
            {
               if (estilos[i][j].style[atributoCss]!='')
                  retorno=estilos[i][j].style[atributoCss];
               break;
            }
         }
      }
   }
   
   return retorno;
}

Por diego1311

61 de clabLevel



 

Lima - Perú

firefox
Citar            
MensajeEscrito el 04 Oct 2011 03:16 pm
El script primero analiza el artibuto style, luego la clase o clases que se definan para el objeto y por ultimo el Id. Gracias

Por diego1311

61 de clabLevel



 

Lima - Perú

firefox
Citar            
MensajeEscrito el 04 Oct 2011 03:59 pm
Pues lo he probado en Opera 11.51 y no me causa ningún error...

El método selectorText me devuelve lo que (supongo) debe devolver...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Oct 2011 07:02 pm
Ahora no puedo ver la versión de Opera que tengo. Como te dije el código funciona muy bien cuando las definiciones de estilo las hago entre las etiquetas <style> en la misma hoja html pero cuando el esilo está en un archivos css externo se produce un error en FIrefox y Opera.

PD: en el primer paramatero de mi función debe ir el ID del objeto y en el segundo el nombre del atributo CSS.

Por ejemplo

ancho_borde=obtenerAtributoCss("miDiv", "border-width");

Gracias.

Por diego1311

61 de clabLevel



 

Lima - Perú

firefox
Citar            
MensajeEscrito el 04 Oct 2011 07:50 pm
Sí, lo entendí y así lo he probado.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.