2012-03-07 166 views
3

所以我想從特定元素中獲取css,將它放在JSON數組中,將元素四處更改,稍後恢復css來自存儲陣列的元素。從元素中獲取CSS,放入JSON數組,更改元素,使用存儲的CSS數組恢復元素

我想:

var currentCSS = $(this).css; 

的輸出是一樣的東西:

function (a,c) if(arguments.length.... 

所以,似乎需要的功能出來了jQuery的,這不是我想要的......

我可以迭代通緝的個別論點,但應該有更好的方法...

再後來offcourse我想嘗試這樣的:

$(this).css(currentCSS); 

但有可能是沒有很好的解決方案這樣做......

+0

css()僅用於獲取單個屬性。你得到的是作爲源的功能 - http://api.jquery.com/css/ – Smamatti 2012-03-07 21:39:59

+0

[重複:如何獲得一個元素的所有計算樣式與jQuery](http://stackoverflow.com/問題/ 2151558 /如何獲得所有的計算風格的元素與jQuery) – 2012-03-07 21:44:46

回答

2

如果你所追求的是相對於所有樣式的內嵌樣式屬性:

var $el=$(elem) 
var style=$el.attr('style'); 
$el.removeAttr('style'); 


/* put style back*/ 

$el.attr('style',style); 

你操縱它之後同樣,刪除任何在線調整,您的代碼......除去style屬性應該把它恢復到原來的任何CSS應用

+0

這將*不*讓他們的完整風格。這隻會得到這些對象的唯一屬性。 – 2012-03-07 21:45:26

+0

@Elf Sternberg - 理解...但可能的是,所有這一切都需要,提出了一個建議 – charlietfl 2012-03-07 21:51:08

+0

我認爲這正是他正在尋找的。這與我在這個答案中採用的方法類似(但他想要整個頁面):http://stackoverflow.com/a/11328023/918414 – ThinkingStiff 2012-07-06 02:42:53

1

這是一種方法,但它的好處是醜陋。我不認爲我有必要把它變成一個插件(但如果別人可能認爲會是真棒,請張貼鏈接!)所需的理智:

var elem = document.getElementById('a'); 
var originalCSSProperties = window.getComputedStyle(​elem,null); 
var originalCSSValues = []; 
for (var i=0,len=originalCSSProperties.length; i<len; i++){ 
    originalCSSValues.push(
     window 
     .getComputedStyle(elem,null) 
     .getPropertyValue(originalCSSProperties[i])); 
} 

$('#a').css({'background-color':'red','color':'black'}); 

$('#reset').click(
    function(){ 
     for (var c=0,leng=originalCSSProperties.length;c<leng;c++){ 
      $('#a').css(originalCSSProperties[c],originalCSSValues[c]); 
     } 
    }); 

JS Fiddle demo

因爲這依賴於window.getComputedStyle()它絕對是而不是 IE友好,而且,雖然我還沒有研究兼容性,但我懷疑它可能需要非常新的瀏覽器。但是,那就是說,我希望這有些用處。

0

首先:

  • 創建jQuery.clone你的元素的副本,並將其存儲在一個 可變
  • 從克隆
  • 讓你想要的任何必要的修改刪除所有子元素你的元素,或者它的內容

當你想變回原來的風格

  • 插入之前克隆/ DOM中的
  • 你的元素之後,從您的元素中刪除的內容,並把它們添加到克隆
  • 刪除你的元素,只留下你的元素的內容克隆

當然,這裏沒有存儲風格的JSON數組。相反,您的原始樣式將保留在元素的克隆中。我認爲這實現了你想要的結果。

這是JSFiddle我在行動中展示了這一點。