Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can jQuery get all CSS styles associated with an element?

Is there a way in jQuery to get all CSS from an existing element and apply it to another without listing them all?

I know it would work if they were a style attribute with attr(), but all of my styles are in an external style sheet.

like image 396
alex Avatar asked Apr 16 '09 03:04

alex


People also ask

How can give multiple CSS properties in jQuery?

Apply multiple CSS properties using a single JQuery method CSS( {key1:val1, key2:val2....). You can apply as many properties as you like in a single call. Here you can pass key as property and val as its value as described above.

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");

Can jQuery override CSS?

cssHooks. Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.

Can jQuery manipulate CSS?

The jQuery CSS methods allow you to manipulate CSS class or style properties of DOM elements. Use the selector to get the reference of an element(s) and then call jQuery css methods to edit it. Important DOM manipulation methods: css(), addClass(), hasClass(), removeClass(), toggleClass() etc.


2 Answers

A couple years late, but here is a solution that retrieves both inline styling and external styling:

function css(a) {     var sheets = document.styleSheets, o = {};     for (var i in sheets) {         var rules = sheets[i].rules || sheets[i].cssRules;         for (var r in rules) {             if (a.is(rules[r].selectorText)) {                 o = $.extend(o, css2json(rules[r].style), css2json(a.attr('style')));             }         }     }     return o; }  function css2json(css) {     var s = {};     if (!css) return s;     if (css instanceof CSSStyleDeclaration) {         for (var i in css) {             if ((css[i]).toLowerCase) {                 s[(css[i]).toLowerCase()] = (css[css[i]]);             }         }     } else if (typeof css == "string") {         css = css.split("; ");         for (var i in css) {             var l = css[i].split(": ");             s[l[0].toLowerCase()] = (l[1]);         }     }     return s; } 

Pass a jQuery object into css() and it will return an object, which you can then plug back into jQuery's $().css(), ex:

var style = css($("#elementToGetAllCSS")); $("#elementToPutStyleInto").css(style); 

:)

like image 61
marknadal Avatar answered Oct 02 '22 14:10

marknadal


Two years late, but I have the solution you're looking for. Not intending to take credit form the original author, here's a plugin which I found works exceptionally well for what you need, but gets all possible styles in all browsers, even IE.

Warning: This code generates a lot of output, and should be used sparingly. It not only copies all standard CSS properties, but also all vendor CSS properties for that browser.

jquery.getStyleObject.js:

/*  * getStyleObject Plugin for jQuery JavaScript Library  * From: http://upshots.org/?p=112  */  (function($){     $.fn.getStyleObject = function(){         var dom = this.get(0);         var style;         var returns = {};         if(window.getComputedStyle){             var camelize = function(a,b){                 return b.toUpperCase();             };             style = window.getComputedStyle(dom, null);             for(var i = 0, l = style.length; i < l; i++){                 var prop = style[i];                 var camel = prop.replace(/\-([a-z])/g, camelize);                 var val = style.getPropertyValue(prop);                 returns[camel] = val;             };             return returns;         };         if(style = dom.currentStyle){             for(var prop in style){                 returns[prop] = style[prop];             };             return returns;         };         return this.css();     } })(jQuery); 

Basic usage is pretty simple, but he's written a function for that as well:

$.fn.copyCSS = function(source){   var styles = $(source).getStyleObject();   this.css(styles); } 

Hope that helps.

like image 27
Dakota Avatar answered Oct 02 '22 14:10

Dakota