【问题标题】:Dynamically add attribute to css class instead of element动态地将属性添加到 css 类而不是元素
【发布时间】:2020-08-08 10:57:28
【问题描述】:

我最近遇到了这种情况,我想将 css 属性添加到类而不是元素中

当我这样做时

    $('.class_with_css').css({display:'none'});

它将样式 "display:none" 添加到当前具有类 "class_with_css" 的所有元素中。 但就我而言,在执行上述代码后,我必须将"class_with_css" 类应用于新元素,并希望保留这种样式添加。有没有办法在不调用上述函数的情况下做到这一点(例如将属性添加到 css 类本身)?

例如。

  1. 两个元素
    <div id=1 class="abc" ></div>
    <div id=2 class="abc" ></div>
  1. 运行代码
    $('.abc').css({display:'none'});
  1. 元素变为:
    <div id=1 class="abc" style="display: none;"  ></div>
    <div id=2 class="abc" style="display: none;" ></div>
  1. 现在我将类 abc 添加到这样的元素中
    <div id=3 class="abc" ></div>

有没有办法让“abc”类保存样式而不是元素,这样第 4 步的元素也有display:none

【问题讨论】:

  • 没有。没有逻辑状态知道您需要将内联样式应用于将来获得该类的元素。您应该添加一个 CSS 规则,修改该类以包含您的显示设置,而不是添加内联样式更改。
  • 否则在添加类的时候也要设置内联样式设置。

标签: javascript html jquery css css-selectors


【解决方案1】:

不,没有办法直接实现你想要的。通常是通过已经拥有具有所需更改/属性的 css 类并应用该类而不是 css 属性来完成的。

因此,您将拥有例如:

.hide {
    display: none
}

并将类添加到元素中:

$('.abc').addClass('hide');

更新
如果您真的想动态添加 css 类,另一种选择是发布here

的答案

【讨论】:

  • 相反,根据默认情况下更需要哪种状态,也可以翻转为.abc:not(.visible) { display: none; }
【解决方案2】:

您可以在标题中注入样式。

但请记住从那时起。您必须使用display: block; 来显示它。否则默认样式将是display: none;,直到您刷新页面。

Inject() 将样式注入到您的标题中

Add() 正在将“abc”类添加到您的其他 div 中

Showme() 正在将“display: block”添加到“.abc”

Hideme() 正在将“display: none”添加到“.abc”

function Inject(){
  $('head').append('<style type="text/css">.abc {display: none;}</style>');
}
function Add() {
  $("#w").addClass("abc");
  $("#z").addClass("abc");
}
function Showme() {
 $(".abc").css("display","block");
}
function Hideme() {
 $(".abc").css("display","none");
}
button {
border: 0;
padding: 1% 3%;
background-color: lightgray;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="x" class="abc">x</div>
<div id="y" class="abc">y</div>
<div id="w">w</div>
<div id="z">z</div>
<p>First Click below and see how w and z are not hiding</p>
<button onclick="Inject()">Click to inject style to head</button>
<p>Second click below and add "abc" class to w and z.</p>
<button onclick="Add()">Click to add abc to w and z</button>
<p>Then click below to add style="display:block;"</p>
<button onclick="Showme()">Click to show anything with class "abc"</button>
<p>Then click below to add style="display:none;"</p>
<button onclick="Hideme()">Click to hide anything with class "abc"</button>

【讨论】:

  • 我们是否可以将规则附加到 head 内现有的 style 标签中,而不是在 head 部分创建新的 style 标签。
  • @AamirSohailKmAs 那将是 .addClass() 但他/她想为类添加样式。
  • 我问的是在 head 中追加 &lt;style type="text/css"&gt;.abc {display: none;}&lt;/style&gt;,而不是在已经存在的 style 标签中追加 .abc {display: none;}
猜你喜欢
  • 2020-03-12
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
相关资源
最近更新 更多