21

我在 jQuery UI 小部件中大量工作,并且由于我需要解决的疏忽,主题化变得越来越困难。

考虑这个问题:

<div id="node" class="ui-widget">
    <div class="ui-widget-content">
    </div>
</div>

然后这个jquery

<script>
 $(function() { 
       $('#node').hover(function (){
           $(this).toggleClass("ui-state-error");
       });
 }); 
</script>

我希望 ui-state-error 对嵌套 div 很重要。这是伪代码,但我发现在容器具有 css 交换并且子级(基本上)忽略它的情况下发生这种情况的大量示例。更糟糕的是:如果我希望能够在 jQuery 中覆盖说“backgroundcolor=ui-state-error:background-color 知道 100%,这一切都不会崩溃,因为我不“知道”必然地,该背景对于所讨论的元素是重要的。

这是一个很好的例子http://jsfiddle.net/WCuYH/1/

编辑我将建议关闭这个问题,因为没有任何尝试回答,与原始帖子的本质相差太多

4

1 回答 1

18

首先!important适用于 CSS 规则中的一个特定声明。它不适用于一个类。所以,“不”你不能上课!important

其次,!important这只是 CSS 特性的一部分。您还可以使用其他方法使规则成为具有优先权的更具体的规则(例如引用父链中的 id 而不仅仅是类。当我编写 CSS 时,使用 !important 是我最后可能的选择- 我宁愿用其他特异性解决方案来解决覆盖。通常,如果你控制所有的 CSS,这很容易避免使用!important。如果你必须覆盖一些你无法控制的 CSS,那么有时它很方便。

如果您的 jQuery 代码要在对象上切换一个类,那么您将必须制定您的 CSS 规则,以便添加/删除此类会导致正确的 CSS 声明具有优先权。为了让我们在这部分进一步帮助您,您需要向我们展示您的 HTML 和 CSS 的相关部分,以便我们就如何解决您的优先级/特异性问题提出建议。

于 2013-05-11T21:10:47.660 回答