2012-04-09 84 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