2012-07-03 10 views

Respuesta

45

Aquí hay una muy simple (probablemente en necesidad de mejora) plug-in que he tirado juntos que les permite conocer el valor de un estilo en línea propiedad (y volver undefined si no se encuentra que la propiedad):

​(function ($) { 
    $.fn.inlineStyle = function (prop) { 
     var styles = this.attr("style"), 
      value; 
     styles && styles.split(";").forEach(function (e) { 
      var style = e.split(":"); 
      if ($.trim(style[0]) === prop) { 
       value = style[1];   
      }      
     }); 
     return value; 
    }; 
}(jQuery)); 

se le puede llamar así:

//Returns value of "width" property or `undefined` 
var width = $("#someElem").inlineStyle("width"); 

Aquí hay un working example.

Tenga en cuenta que solo devolverá el valor del primer elemento en el conjunto coincidente.

ya que devuelve undefined cuando no se encuentra que la propiedad estilo, puede utilizarlo en su situación como esta:

if (base.$element.inlineStyle("width")) { 
    // It has a `width` property! 
} 

actualización

Aquí hay una gran parte, versión mucho más corta . Me di cuenta de que prop("style") devuelve un objeto, no una cadena, y las propiedades de ese objeto corresponden a las propiedades de estilo disponibles. Por lo que sólo puede hacer esto:

(function ($) { 
    $.fn.inlineStyle = function (prop) { 
     return this.prop("style")[$.camelCase(prop)]; 
    }; 
}(jQuery)); 

Es posible que desee reemplazar el uso de $.camelCase con una función CamelCase personalizada, ya que el jQuery parece ser indocumentado y es probablemente no es bueno para confiar. Lo acabo de usar aquí, ya que es más corto.

Aquí hay un working example de ese. Tenga en cuenta que en este caso, el valor de retorno será la cadena vacía si el estilo no se encontró en el elemento. Eso todavía se evaluará a false, por lo que la declaración anterior if debería funcionar.

+0

Genial ... primero pensé en algunas soluciones basadas en reg-ex ... ¡si este trabajo es genial! – coolguy

+0

Gracias James, funcionó muy bien. –

+0

@MatthewGrima - De nada, me alegro de poder ayudar :) –

7

Utilice .attr para verificar el atributo style.

if(base.$element.attr('style').length > 0) { 
    //... 
} 

Si se preocupan por el ancho, entonces

if(base.$element.attr('style').indexOf('width') !== -1) { 
    //... 
} 
+2

Pero, ¿cómo se comprueba si tiene ancho? – coolguy

+0

No me importa si el elemento tiene otros estilos, necesito saber si tiene un ancho definido dentro del atributo de estilo. –

+1

@ubercooluk El operador solo necesita verificar si tiene un estilo en línea. Si desea comprobar 'width', entonces podría hacer algo como' .indexOf ('width')! == -1' – xdazz

-3

Mateo se puede comprobar si atributo de estilo no está definido o no

var attr = $(this).attr('style'); 
    if (typeof attr !== 'undefined') { 
    } 
+2

Esto no es lo que hace la pregunta. Se está preguntando si se ha definido un 'ancho' en el atributo' style'. –

25

¿Por qué no:

var $el = $('element[style*="width"]'); 

Y entonces se puede probar con:

if ($el.length) { 
    //... 
} 
+2

¡esta es la mejor solución! Gracias ! – pmrotule

+0

Me gusta, pero esta solución también coincidirá con 'min-width' y 'max-width', lo que puede ser problemático si se busca específicamente el 'ancho' sin guiones. – Drey

6

Comprobando "ancho" por ejemplo:

if ($(element).prop("style")["width"] !== '') 
{...} 
Cuestiones relacionadas