在jQuery的css()函数中使用!important

Sta*_*hil 36 javascript css jquery jquery-ui jquery-dialog

我有一个带有叠加声的对话框,如下所示:

     .ui-widget-overlay  {
         position: absolute;
         left: 8px;
         top: 9px;
         height: 985px !important;
         width: 518px !important; 
      }
Run Code Online (Sandbox Code Playgroud)

我的页面将有两个不同的页面高度.为了解决这个问题,我在我的JS文件中完成了这个:

如果小的可见:

$('.ui-widget-overlay').css("height", "985px !important");
Run Code Online (Sandbox Code Playgroud)

其他

$('.ui-widget-overlay').css("height", "1167px !important");
Run Code Online (Sandbox Code Playgroud)

显然这不起作用.还有另一种方法可以过度骑行!important吗?

页面可以来回切换,所以我需要总是有一个或另一个.此外,如果我不添加!important到CSS,那么叠加将无限扩展(在Facebook中,所以我假设那里有一个问题)

有什么建议?

gho*_*h'. 24

有一个技巧可以做到这一点.

$('.ui-widget-overlay').css('cssText', 'height:985px !important;');

$('.ui-widget-overlay').css('cssText', 'height:1167px !important;');
Run Code Online (Sandbox Code Playgroud)

cssText正在这里诀窍.它将css样式附加为字符串,而不是变量.


Pio*_*ula 16

不要将样式应用于类.将一个课程作为一种风格应用于你的div!

让jQuery为您完成所有工作

样式表应该包含这些类

.ui-widget-overlay  {
         position: absolute;
         left: 8px;
         top: 9px;
         width: 518px !important; 
         }

.ui-widget-small { height: 985px;  }

.ui-widget-full { height: 1167px; }
Run Code Online (Sandbox Code Playgroud)

好的,那就是你的CSS排序了

现在你的div

 <div id="myWidget" class="ui-widget-overlay ui-widget-small"> YOUR STUFF </div>
Run Code Online (Sandbox Code Playgroud)

现在你可以使用jQuery操作你的div,方法是附加一个按钮/点击/悬停你想要使用的任何东西

$('#myWidget').removeClass('ui-widget-small').addClass('ui-widget-full')
Run Code Online (Sandbox Code Playgroud)

并且您不需要使用!important - 当您开始遇到大型CSS文件或多个加载样式的问题时,这是真正使用的.

这是即时的,但您也可以添加效果

$('#myWidget').hide('slow', function(){ $('#myWidget').removeClass('ui-widget-small').addClass('ui-widget-full').show('slow') }  )
Run Code Online (Sandbox Code Playgroud)

您可以像这样动态地向页面添加样式 - 并将所有现有类替换为另一个类,我们可以使用.attr('class','newClass')代替.

$('body').prepend('<style type="text/css"> .myDynamicWidget { height: 450px; } </style>')
$('#myWidget').attr('class', 'ui-widget-overlay')
$('#myWidget').addClass('myDynamicWidget')
Run Code Online (Sandbox Code Playgroud)

但您不希望使用此方法编写现有样式.这应该用于'丢失'的情况.只是演示了jQuery的强大功能

  • 这是一个很好的建议,但它可能没有解决问题.如果出于某种原因,CSS是不可触摸的(可能是在无法刷新48小时的CDN上,或者CSS是由拒绝进行更改的不同团队完成的),您可能需要`!important`声明.因此,虽然我同意您的解决方案成为问题的根源,但它并不一定能解决手头的问题. (2认同)

Dan*_*ows 11

您可以尝试使用$(this).attr('style', 'height:1167px !important');我没有测试它,但它应该工作.

  • `$('a').attr('style',$(this).attr('style')+'; background:orange!important');`工作正常. (3认同)