jQuery – 删除添加了.css()函数的样式
我正在改变CSS与jQuery,我希望删除我添加的样式基于input值:
if(color != '000000') $("body").css("background-color", color); else // remove style ?
我怎样才能做到这一点? 请注意,只要使用颜色select器select颜色(即当鼠标移动到色轮上时),上面的行就会运行。
第二个注意:我不能用css("background-color", "none")
做这个,因为它会从css文件中删除默认样式。 我只想删除由jQuery添加的background-color
内联样式。
将属性更改为空string似乎可以完成这项工作。
$.css("background-color", "");
接受的答案工作,但在我的testing在DOM上留下一个空的style
属性。 没什么大不了的,但是这一切都消除了:
removeAttr( 'style' );
这假定您想要删除所有dynamic样式并返回到样式表样式。
有几种使用jQuery去除CSS属性的方法:
1.将CSS属性设置为其默认(初始)值
.css("background-color", "transparent")
查看MDN的CSS属性的初始值 。 这里的默认值是transparent
。 您还可以使用多个CSS属性的inheritance来从父级inheritance属性。 在CSS3 / CSS4中,您也可以使用initial
, revert
或unset
但是这些关键字可能只有有限的浏览器支持。
2.删除CSS属性
一个空string删除CSS属性,即
.css("background-color","")
但是要注意,正如jQuery .css()文档中所指定的那样,这将删除属性,但它与IE8对于某些CSS速记属性(包括背景)具有兼容性问题。
将样式属性的值设置为一个空string – 例如$('#mydiv')。css('color','') – 如果元素已经被直接应用,属性,通过jQuery的.css()方法,或者通过对style属性的直接DOM操作。 但是,它不会删除样式表或元素中已应用CSS规则的样式。 警告: 一个值得注意的例外是,对于IE 8及以下版本,删除诸如边框或背景之类的简写属性将从该元素中完全删除该样式,无论样式表或元素中设置了什么 。
3.去除元素的整体风格
.removeAttr("style")
为了让您了解纯JavaScript的方式,我使用纯JavaScript来移除样式属性
var bodyStyle = document.body.style; if (bodyStyle.removeAttribute) bodyStyle.removeAttribute('background-color'); else bodyStyle.removeProperty('background-color');
这些jQuery函数中的任何一个都可以工作:
$("#element").removeAttr("style"); $("#element").removeAttr("background-color")
这将删除完整的标签:
$("body").removeAttr("style");
感觉如何?
var myCss = $(element).attr('css'); myCss = myCss.replace('background-color: '+$(element).css('background-color')+';', ''); if(myCss == '') { $(element).removeAttr('css'); } else { $(element).attr('css', myCss); }
尝试这个:
$('#divID').css({"background":"none"});// remove existing $('#divID').css({"background":"#bada55"});// add new color here.
谢谢
如果您使用CSS样式,则可以使用:
$("#element").css("background-color","none");
然后replace为:
$("#element").css("background-color", color);
如果您不使用CSS样式,并且在HTML元素中有属性,则可以使用:
$("#element").attr("style.background-color",color);
使用我的插件:
$.fn.removeCss=function(all){ if(all===true){ $(this).removeAttr('class'); } return $(this).removeAttr('style') }
对于你的情况,使用它如下:
$(<mySelector>).removeCss();
要么
$(<mySelector>).removeCss(false);
如果你想删除其类中定义的CSS:
$(<mySelector>).removeCss(true);
只要使用:
$('.tag-class').removeAttr('style');
要么
$('#tag-id').removeAttr('style');
这一个也工作!
$elem.attr('style','');
这比其他一些解决scheme更为复杂,但可以在场景中提供更多的灵活性:
1)做一个类定义来隔离(封装)你想要select的应用/删除的样式。 它可以是空的(在这种情况下,可能应该是):
.myColor {}
2)使用这个代码,基于http://jsfiddle.net/kdp5V/167/从这个答案; gilly3 :
function changeCSSRule(styleSelector,property,value) { for (var ssIdx = 0; ssIdx < document.styleSheets.length; ssIdx++) { var ss = document.styleSheets[ssIdx]; var rules = ss.cssRules || ss.rules; if(rules){ for (var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++) { var rule = rules[ruleIdx]; if (rule.selectorText == styleSelector) { if(typeof value == 'undefined' || !value){ rule.style.removeProperty(property); } else { rule.style.setProperty(property,value); } return; // stops at FIRST occurrence of this styleSelector } } } } }
用法示例: http : //jsfiddle.net/qvkwhtow/
注意事项:
- 没有广泛的testing。
- 不能在新的价值中包含重要或其他指令。 任何这样的现有指令将通过这种操作而丢失。
- 只有首先发现更改styleSelector的发生。 不添加或删除整个样式,但可以用更精细的东西来完成。
- 任何无效/不可用的值将被忽略或抛出错误。
- 在Chrome(至less)中,非本地(如跨站点)的CSS规则不会通过document.styleSheets对象公开,所以这不适用于它们。 必须添加一个本地覆盖和操作,记住这个代码的“首先发现”的行为。
- document.styleSheets对于一般的操作并不是特别的友好,不要期望它能够用于积极的使用。
以这种方式分离样式是CSS的全部,即使操纵它也不是。 操纵CSS规则并不是jQuery的全部内容,jQuery操作DOM元素,并使用CSSselect器来实现。
网站开发简单便宜。 我build议在删除特定的样式时使用空string
$(element).style.attr = ' ';
尝试这个
$(".ClassName").css('color',''); Or $("#Idname").css('color','');
为什么不制作你想要删除CSS类的样式? 现在你可以使用: .removeClass()
。 这也打开了使用的可能性: .toggleClass()
(删除类,如果它不存在)。
在处理布局问题时,添加/删除类也不那么容易混淆,无法改变/排除故障(而不是试图找出特定样式为什么消失)。