Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery check if element has a specific style property defined inline

I need to check whether an element has a defined css property given to it, but I'm having some trouble using the jQuery.css() function.

The property I'm looking for is width.

If the element does not have a defined width and I try this:

if(base.$element.css('width') !== 'undefined') 

I get the browser's computed width.

like image 238
Matthew Grima Avatar asked Jul 03 '12 08:07

Matthew Grima


People also ask

How do you check if an element has a style?

To check if an element's style contains a specific CSS property, use the style object on the element to access the property and check if it's value is set, e.g. if (element. style. backgroundColor) {} . If the element's style does not contain the property, an empty string is returned.

How can check CSS property value in JQuery?

Get a CSS Property Value You can get the computed value of an element's CSS property by simply passing the property name as a parameter to the css() method. Here's the basic syntax: $(selector). css("propertyName");

Is style an inline element?

An inline CSS is used to apply a unique style to a single HTML element. An inline CSS uses the style attribute of an HTML element.

What is an inline style rule?

Inline styles are used to apply the unique style rules to an element, by putting the CSS rules directly into the start tag. It can be attached to an element using the style attribute. The style attribute includes a series of CSS property and value pairs.


2 Answers

Here's a very simple (probably in much need of improvement) plugin I've thrown together that will get you the value of an inline style property (and return undefined if that property is not found):

​(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)); 

You can call it like this:

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

Here's a working example.

Note that it will only return the value for the first element in the matched set.

Since it returns undefined when that style property is not found, you can use it in your situation like this:

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

Update

Here's a much, much shorter version. I realised that prop("style") returns an object, not a string, and the properties of that object correspond to the available style properties. So you can just do this:

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

You may want to replace the use of $.camelCase with a custom camelcase function, since the jQuery one appears to be undocumented and is probably not good to rely upon. I just used it here as it's shorter.

Here's a working example of that one. Note that in this case, the return value will be the empty string if the style was not found on the element. That will still evaluate to false, so the above if statement should still work.

like image 105
James Allardice Avatar answered Oct 02 '22 13:10

James Allardice


Why not just:

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

And then you can test it with:

if ( $el.length ) {     //... } 
like image 33
Alain Jacomet Forte Avatar answered Oct 02 '22 15:10

Alain Jacomet Forte