如何使用jquery获取元素的css属性列表

问题描述:

我想弄清楚是否有更简单的方法来保存CSS属性列表我将更改,然后恢复使用JSON对象中的任何元素jquery无需编写如下getAttributes函数。如何使用jquery获取元素的css属性列表

可以说我有3个属性的阵列,我想保留的元素:

我可以这样写一个函数就应该是这样的:

function getAttributes(elem, attrs){ 
    var obj={}; 
    $.each(attrs,function(i,attr){ 
     obj[attr]=$(elem).css(attr); 
    }); 
    return obj; 
    } 

    oldAttrs=getAttributes('input',['color','background-color','font-size']); 

    $('input').css({color:'green', 'background-color':'blue', fonts-size:'10px'}); 
    ......  

后来,我就可以只做这个优雅的方法来恢复:

$('input').css(oldAttrs); 

任何想法?

这里没有jQuery函数,但静态方法window.getComputedStyle适用于所有现代浏览器和IE9。

var cachedStyle = window.getComputedStyle(domElement); 

// later 
$(domElement).css(cachedStyle); 

更新:如果你只希望保留一些样式属性

你不能选择你开始使用getComputedStyle哪些属性,但您可以选择您在使用哪些$的.css。假设您只想保留背景颜色,宽度和左边距(出于某种原因):

var cachedStyle = window.getComputedStyle(domElement); 
var propNamesToPreserve = ['backgroundColor','width','marginLeft']; // use the JS-style camelcased attributes, not hyphen-separated CSS properties 

var preservedProps = {}; 
$.each(propNamesToPreserve, function(ix, name) { 
    preservedProps[name] = cachedStyle[name]; 
}); 

//later 
$(domElement).css(preservedProps); 
+0

#1。这保留了每个属性。如果我想要的是保留3或4个属性,是否有惩罚? #2。通过现代浏览器,你的意思是HTML5? – user603749 2013-04-27 19:32:17

+0

无论doctype是HTML4,XHTML还是HTML5,它都可以工作。通过现代浏览器,我只是说它不适用于IE8。 – zetlen 2013-04-27 19:44:07

+0

只有3或4个属性没有性能损失 - 事实上,它可能会更快,因为'$ .fn.css'遍历所有对象属性。我会用一个解决方案更新我的答案。 – zetlen 2013-04-27 19:45:55