2

我有这个代码

    $(textObject).children().each(function() {
        $(this).removeAttr('style');
        console.log('removing style from first level element: '+this);

    });

但我希望它也影响所有嵌套元素,这个只影响第一级子元素。我也试过

$(this).children().removeAttr('style');

这是行不通的。

我也试过

$(this).children().css('font-size','');

这也不起作用。

我想完成什么可能很清楚。

4

7 回答 7

9

尝试

$(this).find('*').removeAttr('style');

在这里演示

于 2013-10-09T09:29:51.337 回答
2

尝试

$(this).find('[style]').addBack().removeAttr('style');

演示:小提琴

于 2013-10-09T09:27:41.373 回答
0

您可以使用星号使用纯 CSS 执行此操作。

您没有指定textObject指的是什么元素,但​​为了论证,假设它是一个 div 与 idelement

#element * { font-size: inherit; }

或者要强制此样式覆盖已在子元素上设置的任何其他内容,请使用!important

#element * { font-size: inherit !important; }
于 2013-10-09T09:27:48.250 回答
0

您可以使用以下方式访问所有子项:

$(textObject).find('*').each(function() {
        $(this).removeAttr('style');
        console.log('removing style from first level element: '+this);
});

如果您不需要记录它,只需执行以下操作:

$(textObject).find('*').removeAttr('style');
于 2013-10-09T09:30:11.230 回答
0

在 jQuery 的 find() 方法中使用 *。children()将循环到一个级别,而find()将循环到嵌套级别。所以你的代码是

$(this).find('*').removeAttr('style');

工作代码在这里

于 2013-10-09T09:31:18.813 回答
0

$(this).children().removeAttr('style');

不起作用,因为.children()只会访问$(this).

有多种方法可以做到这一点。您可以使用 jQuery 选择器的第二个参数使其充当过滤器。

// Select everything starting at whatever 'this' is refering to
$('*', this).removeAttr('style');

可以在此处找到演示。

或者您可以使用 Rex 描述的方式。

于 2013-10-09T09:43:28.523 回答
0

使用类名设置子元素的样式并通过使用 jQuery 切换类名来删除样式对您来说不是更容易吗?

这个标记:

<div class="parent fancy-styles">
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
</div>

使用这个 CSS:

.fancy-styles .child {
  /* styling */
}

然后触发:

$(".parent").toggleClass("fancy-styles")
于 2013-10-09T09:47:19.253 回答