javascript - 如何替换 css 类内容?

标签 javascript jquery css background-color rgba

我有一个代码,其中有一个充满正方形的地方,里面有一个每秒移动的彩色正方形,这个正方形有一个 CSS 类来表示它的颜色,所以它并没有真正移动,只是向 <span> 添加了一个新类。并在一秒钟后将其删除。

我有一个函数,我想改变正方形的颜色,它会像这样工作: changeColor({R:50,G:200,B:50,A:1})

我一直在努力让它工作,但我遇到了这个问题:

  • 因为我有添加和删除方形颜色类的功能,所以我无法更改 CSS 类名称,它必须相同,否则应用程序将无法运行。

  • 如果我使用 .css("background", "rgba(" + R + "," + G + "," + B + "," + A + ")");它在当前 <span> 中添加颜色永远。

  • 我无法拥有 .attr()工作,也许我做得不正确。

我试过使用 .css , .removeClass , .addClass , 和 .attr

都没有用,可能我没有正确使用它。

function changeColor(sqColor) {

    R = sqColor.R;
    G = sqColor.G;
    B = sqColor.B;
    A = sqColor.A;

    $($("#container .sq_bullet a.sq_current > span")[0]).css("background", "rgba(" + R + "," + G + "," + B + "," + A + ")");

}

(这是 a.sq_current,因为“跨度”在“a”内)

完整代码太长发不上来,不好意思,当真一大堆<span>里面什么都没有,只有 css 属性。

所以目标是更改 CSS 类:

#container .sq_bullet a.sq_current > span {
    background: rgba(255,106,0,1);
}  

无论我在函数中输入什么,例如:changeColor({R:50,G:200,B:50,A:0.8})

最佳答案

您可以通过将内联元素写入 header 然后动态地将样式附加到它来实现这一点。然后,您可以在跨度上添加/删除类并独立更新元素中的样式,而无需向跨度编写任何内联样式。

这是一个例子(这可以进一步改进,我只是重用了我之前的例子并对其进行了调整以证明我的意思):

var element = $("#container .sq_bullet a.sq_current > span").eq(0);

function changeColor(sqColor) {
  R = sqColor.R;
  G = sqColor.G;
  B = sqColor.B;
  A = sqColor.A;
  
  if (!$('myStyles').length) {
    $('head').append('<style id="myStyles" type="text/css"></style>');
  }
  var newStyle = ".myClass { background: rgba(" + R + "," + G + "," + B + "," + A + ");}";
  $('#myStyles').html(newStyle);
}

element.addClass('myClass');
changeColor({R:50,G:200,B:50,A:0.8});

setTimeout(function() {
  element.removeClass('myClass');
}, 2000);

setTimeout(function() {
  element.addClass('myClass');
  changeColor({R:200,G:50,B:50,A:0.8});
}, 4000);
.myClass {
  border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
  <div class="sq_bullet">
    <a class="sq_current">
      <span>Span</span>
      <span>Span</span>
      <span>Span</span>
    </a>
  </div>
</div>

请注意,此示例创建了一个内联样式 block ,其 .myClass 背景设置为绿色。然后它将类添加到跨度中,两秒后删除类,然后两秒后将背景颜色更改为红色并再次添加类 - 所有这些都没有在跨度本身上写入任何内联样式。

关于javascript - 如何替换 css 类内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809489/

相关文章:

javascript - NPM 环境变量在 Windows 中不起作用?

javascript - 如何使用html2canvas和jspdf以正确和简单的方式导出为pdf

html - CSS 效果添加为主动效果

javascript - 删除元素时自动滚动

javascript - 在 Javascript 中搜索表的多行和多列

javascript - 从一组对象中提取一个属性并用它们构建一个字符串

javascript - Jasmine + Node.js 用于服务器端单元测试。如何运行测试?

javascript - 使用 jquery 将类名添加到附加的子元素

javascript - 使用 Javascript 将类插入到元素中

javascript - 开始为基于 Django REST API 的系统开发客户端(CORS 错误)?