2013-12-11 80 views
0

我想要在網頁中獲取標識的背景顏色。 我會做的是克隆徽標,並將克隆放入另一個應該是正確顏色的div。遞歸獲取元素的背景顏色失敗

文件看起來像:

<div> 
    <div class="foo"> 
     <div id="start"> 
      Find background for this div 
     </div> 
    </div> 
</div> 
<button onclick="on_find_color_clicked()"> 
    find color 
</button> 

我曾嘗試是:

function on_find_color_clicked() 
{ 
    var background = get_background_of($('#start')); 

    alert("the background is " + background); 
} 

function get_background_of(element) 
{ 
    var parent = element.parent(); 
    var value = element.css('background'); 

    var result; 
    if (is_null_or_empty(value)) 
    { 
    result = parent != null 
     ? get_background_of(parent) : ""; 
    } 
    else 
    result = value;  

    return result; 
} 

function is_null_or_empty(value) 
{ 
    return value == null || value == ''; 
} 

我得到這個錯誤:

NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIDOMWindow.getComputedStyle] 

return window.getComputedStyle(elem, null); 

http://jsfiddle.net/MCC9L/5/

+0

試試這個[小提琴](http://jsfiddle.net/MCC9L/13/)它的正常工作 –

+0

Pranav:是,它的工作原理,請對此評論作出回答,請 –

回答

0

,而不是整個background物業,通過更改var value = element.css('background');var value = element.css('backgroundColor')

但是更大的問題是function is_null_or_empty(value) { return value == null || value == ''; }應該是function is_null_or_empty(value) { return value == null || value == '' || value==='rgba(0, 0, 0, 0)' || value==='transparent'; },因爲空的backgroundColor可以返回爲rgba(0, 0, 0, 0)transparent。否則它不會被觸發。

像這樣

function on_find_color_clicked() { 
    var background = get_background_of($('#start')); 
    alert("the background is " + background); 
} 

function get_background_of(element) { 
    var parent = element.parent(); 
    var value = element.css('backgroundColor'); 
    var result; 
    if (is_null_or_empty(value)) { 
     result = parent && parent != null ? get_background_of(parent) : ""; 
    } else { result = value; } 
    return result; 
} 

function is_null_or_empty(value) { 
    return value == null || value == '' || value==='rgba(0, 0, 0, 0)' || value==='transparent'; 
} 

做出了小提琴:http://jsfiddle.net/filever10/USNaZ/

+0

「背景透明」在Firefox中 –

+0

然而,我已經來到解決方案 –

+0

沒有問題,更新以適應FF。 – FiLeVeR10

1

我希望這有助於

http://jsfiddle.net/MCC9L/27/

function on_find_color_clicked() { 
    var background = get_background_of($('#start')); 

    alert("the background is " + background); 
} 

function get_background_of(element) { 
    var parent = element.parent(); 
    var value = element.css('background-color'); 

    if (value.indexOf("rgba(0, 0, 0, 0)") != -1) { 
     value = get_background_of(parent); 
    } 

    return value; 
} 
+0

對任何父母。 –

+0

我得到了「背景是透明的」 –

+1

嗯......瀏覽器的差異?我在Chrome上,它返回「背景是rgb(255,0,255)」。 – 12hys

1

你需要的,如果您想要的顏色,你應該要求它使用.css("background-color")代替.css("background")