2012-04-09 95 views
1

我怎麼能用cssHooks(jQuery)重寫css屬性,但是prop是在外部css中。我怎麼能忽略css屬性

例如

的index.html

<div id="test">abc</div> 

styles.css的

#test {background: red;} 

我每次使用後臺道具時我想隱藏此ELEM,什麼也不做背景。

「但我想這樣做不僅對某些DIV(#TEST),但在我的CSS背景道具的每個元素」

+0

你是什麼意思「隱藏這個......並且什麼也不背景」? – 2012-04-09 18:17:39

+0

請重申您的問題,包括對答案作出的評論。 – iambriansreed 2012-04-09 18:24:21

+0

感謝您更新您的問題。 – iambriansreed 2012-04-09 18:31:33

回答

1

,如果你使用jQuery,你可以做

$('#test').css('display','none'); 

這將隱藏元素並保持背景不變。

[編輯]我不認爲我理解了以前的問題。根據你的評論,你想要做的是改變使用background屬性的東西嗎?我不相信有辦法做到這一點。我能想到的唯一選擇是遍歷每個DOM元素,並檢查是否有element.style.background集合。

+0

但我想這樣做不僅對於某些div(#test),而且對於在我的css中具有背景通道的每個元素 – SakerONE 2012-04-09 18:21:20

+0

「您想要做的是更改使用背景屬性的東西嗎?」 - 是的( – SakerONE 2012-04-09 18:34:32

0

直接在元素上設置的樣式值將覆蓋CSS中設置的事物。如果你想隱藏的元素,你可以這樣做是這樣的:

$('#test').hide(); 

內部,這僅僅是用於設置elem.style.display = "none";的快捷方式。

您的問題的這一部分讓我們感到困惑:「每次我使用背景支撐時,我都想隱藏這個元素,並且不會對背景做任何事情。」所以如果你需要更多的答案,你需要澄清你的問題。

隱藏元素不會以任何方式更改背景(儘管它將不再可見)。如果您試圖在保持元素可見的情況下隱藏背景,那麼您需要將背景設置爲透明。

$('#test').css("background", "transparent"); 

直接在元素上設置此樣式值將覆蓋您設置的所有CSS樣式表規則。

1

如果要隱藏設置了css屬性background的元素,最好爲這些元素添加一個類。然後根據類隱藏元素。

下面的示例隱藏了類background-set的所有項目。

$('.background-set').hide(); 

更糟的方法是抓住元素,並篩選出如果未設置background屬性。我用div選擇器開始搜索,但可以根據需要展開搜索。

$('div').filter(function() { 
    return $(this).css('background').replace('rgba(0, 0, 0, 0) none repeat scroll 0% 0%','').length > 0; 
}).hide(); 
+0

)第二個功能是行不通的,看到我的回答,雖然很好的想法! – adeneo 2012-04-09 19:10:39

+0

@ adeneo修復了它,所以它在chrome中按預期工作 – iambriansreed 2012-04-09 19:16:42

0

當使用javascript檢查背景屬性時,不同的瀏覽器將返回不同的值。對於沒有背景設置的元素,Chrome會返回rgba(0, 0, 0, 0) none repeat scroll 0% 0%,因此檢查返回字符串的長度將不起作用,其他瀏覽器可能不支持rgba並返回其他內容。

你真正需要做的是檢查,看看是否background屬性符合以上條件,至少爲Ch​​rome,然後再找出其他瀏覽器返回爲好,做的確實低效類似:

var pattern=/rgba\(0\, 0\, 0\, 0\)/gi; 

$.each($('*'), function(index, item) { 
    var bg = $(item).css('background'); 
    if (!bg.match(pattern)) { 
     $(item).hide(); 
    } 
}); 

FIDDLE

+0

另一個正則表達式過量。 – iambriansreed 2012-04-09 19:18:12