我如何使用 javascript/jQuery 覆盖 css 属性,例如 cssHooks(jQuery),但 prop 在外部 css 中。
例如
索引.html
<div id="test">abc</div>
样式.css
#test {background: red;}
每次我使用背景道具时,我都想隐藏这个元素并且对背景不做任何事情。
“但我不仅想对某些 div (#test) 这样做,而且对我的 css 中带有背景道具的每个元素都这样做”
我如何使用 javascript/jQuery 覆盖 css 属性,例如 cssHooks(jQuery),但 prop 在外部 css 中。
例如
索引.html
<div id="test">abc</div>
样式.css
#test {background: red;}
每次我使用背景道具时,我都想隐藏这个元素并且对背景不做任何事情。
“但我不仅想对某些 div (#test) 这样做,而且对我的 css 中带有背景道具的每个元素都这样做”
如果你使用 jquery,你可以这样做
$('#test').css('display','none');
这将隐藏元素并保持背景不变。
[编辑]我认为我以前不理解这个问题。根据您的评论,您想要做的是更改正在使用该background
属性的内容?我不相信有办法做到这一点。我能想到的唯一选择是遍历每个 DOM 元素并检查是否设置了 element.style.background。
如果要隐藏background
设置了 css 属性的元素,最好为这些元素添加一个类。然后根据类隐藏元素。
下面的示例隐藏了所有具有 class 的项目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();
直接在元素上设置的样式值将覆盖 CSS 中设置的内容。如果要隐藏元素,可以这样做:
$('#test').hide();
在内部,这只是设置的快捷方式elem.style.display = "none";
。
您问题的这一部分让我们感到困惑:“每次我使用背景道具时,我都想隐藏这个元素并且对背景不做任何事情。” 因此,如果您需要更多答案,则需要澄清您的要求。
隐藏元素不会以任何方式改变背景(尽管它将不再可见)。如果您试图在保持元素可见的同时隐藏背景,那么您需要将背景设置回透明。
$('#test').css("background", "transparent");
直接在元素上设置此样式值将覆盖您设置的任何 CSS 样式表规则。
使用javascript检查背景属性时,不同的浏览器会返回不同的值。Chromergba(0, 0, 0, 0) none repeat scroll 0% 0%
会为没有设置背景的元素返回,因此检查返回字符串的长度将不起作用,其他浏览器可能不支持 rgba 并返回其他内容。
你真正需要做的就是检查背景属性是否与上述匹配,至少对于 Chrome,然后找出其他浏览器也返回什么,然后做一些非常低效的事情,比如:
var pattern=/rgba\(0\, 0\, 0\, 0\)/gi;
$.each($('*'), function(index, item) {
var bg = $(item).css('background');
if (!bg.match(pattern)) {
$(item).hide();
}
});