2012-02-27 105 views
0

我有一個要求,我必須刪除元素的背景,如果它與指定的顏色匹配。此要求僅適用於Chrome。但是,如果我使用下面的代碼如何匹配RGB顏色與RGBA顏色

function unhighlight() { 
    $('*').each(function() { 
     if($(this).css("background-color") == "rgb(0,128,128)"){ 
      $(this).css("background-color",""); 
     } 
    }); 
} 

但上面的代碼在Chrome中不起作用,因爲Chrome試圖與RGBA()匹配。
有沒有任何解決方法,這.. ..?請幫助我...

回答

1

在Chrome中適用於我。我選擇改變body *因爲我沒有想捕捉的HTML和標題標籤等。此外,還要確保你射擊的功能時,該文件已準備就緒:

$(document).ready(function() { unhighlight(); }); 

function unhighlight() { 
    $('body *').each(function() { 
     if ($(this).css("background-color") == "rgb(255, 0, 0)"){ 
      $(this).css("background-color",""); 
     } 
    }); 
}​ 

在這裏看到:​​

1

一個小調查,看來不具有明確的背景顏色返回元素:

"rgba(0, 0, 0, 0)" 

雖然有色項返回:

"rgb(171, 48, 76)" 
1

這不是一個簡單的任務,因爲你需要考慮到其他可能的顏色格式代表相同的值,例如:

rgb(0,128,128) 
rgba(0, 128, 128, 1) 
#008080 //hey, why not, who said your color will be always defined in rgb? 
*#fc0 //different color to show alternative format, #ffcc00 == #fc0 

而且,瀏覽器不以一致的方式行事。例如,即使在CSS中使用了十六進制值,Firefox和Chrome始終會返回rgb()字符串,但IE會返回已定義的CSS值。

如果你想確保你的目標正確的顏色,你應該把它轉換成一個共同的格式,然後進行比較。

function toHex(color) 
{ 
    var m = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/.exec(color); 
    return m ? '#' + (1 << 24 | m[1] << 16 | m[2] << 8 | m[3]).toString(16).substr(1) : color; 
} 

function unhighlight() { 
    $('div').each(function() { 
     if(toHex($(this).css("background-color")) == toHex("rgb(255,204,0)")){ 
      $(this).css("background-color",""); 
     } 
    }); 
} 

注:我toHex功能不會做的唯一的事情是要考慮到3位十六進制顏色格式,所以你應該稍微修改它。