如何使用javascript清除所有内联样式,而仅保留CSS样式表中指定的样式?


94

如果我的html中包含以下内容:

<div style="height:300px; width:300px; background-color:#ffffff;"></div>

这在我的CSS样式表中:

div {
    width:100px;
    height:100px;
    background-color:#000000;
}

是否可以使用javascript / jquery删除所有内联样式并仅保留css样式表指定的样式?

Answers:


166

$('div').attr('style', '');

要么

$('div').removeAttr('style');(摘自安德烈斯的回答

要使其更小一些,请尝试以下操作:

$('div[style]').removeAttr('style');

这应该可以加快速度,因为它会检查div是否具有样式属性。

无论哪种方式,如果您有大量的div,这都可能需要一些时间来处理,因此您可能要考虑使用JavaScript以外的其他方法。


如果必须删除style属性,则还必须寻找它,因此最后一个解决方案似乎只是使代码更加肮脏。当然,最好的办法是仅通过ID来选择需要删除样式的元素。
Jose Faeti 2011年

这只会针对div。如果您想针对所有目标怎么办?
路灯

1
另外,.css()以空字符串作为第二个值调用将仅从内联样式中删除命名的值,例如$('div')。css('display',''); 将仅删除内联显示属性(如果已设置)。
汤姆·戴维斯

2
@streetlight $('*').removeAttr('style')用于定位所有内容。
Makaze 2014年

不,实际上第二个应该更快一些,因为如果JQuery有任何意义,那么它将使用标准的removeattribute。此外,您会忘记通过更多的DOM元素进行循环所带来的巨大效率低下,这使得第二种方法比第一种方法更快。

32

纯JavaScript:

您不需要jQuery来完成一些琐碎的事情。只需使用该.removeAttribute()方法即可。

假设您仅针对单个元素,则可以轻松使用以下内容:(示例)

document.querySelector('#target').removeAttribute('style');

如果您要定位多个元素,则只需遍历选定的元素集合即可:(示例)

var target = document.querySelectorAll('div');
Array.prototype.forEach.call(target, function(element){
    element.removeAttribute('style');
});

Array.prototype.forEach()-IE9及更高版本.querySelectorAll()--IE 8(部分)IE9及更高版本。


1
另一种方法Array.prototype.forEach.call是相当受支持的splat运算符,它可以节省一行:[... document.querySelectorAll('div')].forEach(div => div.removeAttribute('style'))

22
$('div').removeAttr('style');

这比做attr('style','')更有效吗?
马特

与$('div')。attr('style',''); <div style =“”> </ div>和$('div')。removeAttr('style'); <div> </ div>更干净
andres descalzo

可能是因为它没有将其设置为null值,但是无论哪种方式,您都将要花费大量的处理时间,因为它必须遍历主体中的每个div。
泰勒·卡特

是的,很明显,应该将其更改为ID $(“#id”)或$(“ .classDivs)类
andres descalzo,2009年

3

我正在使用该$('div').attr('style', '');技术,但在IE8中不起作用。

我使用输出了style属性alert(),但它并未去除内联样式。

.removeAttr 最终在IE8中达到绝招。


3

如果只需要清空style元素的,则:
element.style.cssText = null;
这应该很好。希望能帮助到你!


如果尝试仅“空”元素的单个样式属性,则似乎适用类似的逻辑:element.style.display = null;-这就是我所需要的:D
Bilal Akil

1

这可以分两个步骤完成:

1:通过标记名,ID,类等选择要更改的元素。

var element = document.getElementsByTagName('h2')[0];

  1. 删除样式属性

element.removeAttribute('style');


-2

您也可以尝试将样式表中的CSS列为!important


3
尽管这行得通,但是以!important覆盖内联样式以删除它们是一种可怕的做法
joshvermaire 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.