jQuery移除所有元素的样式属性

18

我知道如何从单个元素中删除属性,已经有一些帖子讨论了这个问题:

$("div.preview").removeAttr("style");

这是HTML代码:

<div class="preview" style="background-color:white">
   <p>Some text<span style="font-size:15px;">some text</span></p>
   some more code
</div>
问题在于这只会从预览 div 中删除 style 属性,而我想从该 div 内的所有元素中删除。这只是一个例子,在实际情况中,HTML 将更加复杂。
有没有简便的方法来做到这一点?
更新: 好的,我现在知道如何做了。但如果将 HTML 作为存储在变量中的字符串发送给函数,该怎么办?因此,

的替代方法是什么?
$("div.preview") 

我有

var string = '<div class="preview"><p style='font-size:15px;'>....</p><div>'

有没有办法说出类似下面这样的话?

$(string).find(*).removeAttr("style");

是的,选择 div,选择它的所有子元素,将 div 添加回集合中,然后移除类。 - Kevin B
1
$("div.preview, div.preview *").removeAttr("style"):请将上述代码翻译为中文。 - Derek
7个回答

41
你可以使用通配符选择器*来选择div.preview下面的所有内容。

jsFiddle

$('div.preview *').removeAttr('style');

更新

关于您相关的问题,如果我们有一个字符串而不是DOM元素。我们可以将它们转换为jQuery对象,像上面那样删除属性,然后再转换回来(如果需要)。

jsFiddle

// jQuery extension to get an element's outer HTML
// https://dev59.com/4XE95IYBdhLWcg3wMa51#2419877
jQuery.fn.outerHTML = function(s) {
    return s
        ? this.before(s).remove()
        : jQuery("<p>").append(this.eq(0).clone()).html();
};

var string = '<div class="preview"><p style="font-size:15px;">....</p><div>'
var elements = $(string);
elements.find('*').removeAttr('style');

var withoutStyles = elements.outerHTML();
alert(withoutStyles);

谢谢,我有一个关于这个话题的问题。请看我的更新问题。 - user1324762
1
更新了我的答案并提供了解决方案。 - Daniel Imms
太好了。我其实也在尝试类似的操作,但我的错误在于我把所有东西都写在了一行里 $(string).find('*').removeAttr('style')。不确定为什么这样不同。 - user1324762
在Chrome中,它只会删除子元素的样式属性,而不是父元素(.preview)的。 - Mayank

5

尝试使用: $("div.preview").children().removeAttr("style");

或者使用: $("div.preview").find("*").removeAttr("style"); 来获取子孙元素。


1
这只会获取子代,而不会获取孙代等。 - Daniel Imms

1
$("div.preview, div.preview *").removeAttr("style");

0

$("div.preview,div.preview *")).removeAttr("style")

该代码是一个jQuery脚本,其功能是移除"div.preview"元素及其所有子元素上的样式。

0
选择 div,选择它的子元素,然后将 div 添加回集合并移除类。
$('div.preview').find('[style]').addBack().removeAttr('style')
// replace addBack with andSelf for older jQuery
// if you don't want to remove it from the preview div, just leave addBack off.

然而,从长远来看,修复编辑器可能比修复结果更好。


0
你可以尝试这个。
$("div.preview").find('*').removeAttr("style");

要从所有子元素中移除 div.preview 的样式


-1

试着这样做

$("#frameDemo").contents().find("#div_id").parent('div').removeAttr('onclick');
$("#frameDemo").contents().find("#div_id").children('div').removeAttr('onclick');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接