【问题标题】:Can I use Javascript to change div class when div class is not unique?当 div 类不唯一时,我可以使用 Javascript 更改 div 类吗?
【发布时间】:2022-02-10 03:59:17
【问题描述】:

有没有办法通过javascript来改变下面分配给这三个不同div的类。正如你所看到的,所有的类都是相同的,但样式不同,我希望能够按类控制样式:

<div class="pending-task-value" style="background-color: rgb(232, 188, 13);"> 0 <!----></div>

<div class="pending-task-value" style="background-color: rgb(47, 145, 211);"> 0 <!----></div>

<div class="pending-task-value" style="background-color: rgb(19, 152, 126);"> 0 <!----></div>

实际上我希望结果是:

<div class="pending-task-value-total";> 0 <!---></div>
<div class="pending-task-value-phone";> 0 <!---></div>
<div class="pending-task-value-sms";> 0 <!---></div>

编辑,这是今天的 HTML……我不能直接编辑 HTML,所以我需要一种方法来更改背景颜色的颜色。

<div class="card-body">
  <div class="row" style="text-align: center;">
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(232, 188, 13);"> 0
        <!---->
      </div>
      <div><i class="fas fa-tasks"></i></div>
      <div>Total Pending</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(47, 145, 211);"> 0
        <!---->
      </div>
      <div><i class="fas fa-phone"></i></div>
      <div>Phone</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(19, 152, 126);"> 0
        <!---->
      </div>
      <div><i class="fas fa-sms"></i></div>
      <div>SMS</div>
    </div>
  </div>

唯一使每个“待定任务值”独一无二的是“背景颜色”样式元素。我想更改背景颜色,使其如下所示,但我需要 javascript 来执行此操作,但不知道如何进行更新:

<div class="card-body">
  <div class="row" style="text-align: center;">
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: #2B32B2;"> 0
        <!---->
      </div>
      <div><i class="fas fa-tasks"></i></div>
      <div>Total Pending</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: #1488CC;"> 0
        <!---->
      </div>
      <div><i class="fas fa-phone"></i></div>
      <div>Phone</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: #d63384;"> 0
        <!---->
      </div>
      <div><i class="fas fa-sms"></i></div>
      <div>SMS</div>
    </div>
  </div>

或者,如果有一种方法可以为每个“待定任务值”更改/添加样式以使它们独一无二,这样我就可以将 css 应用于它们,这对我也有用。

【问题讨论】:

  • 到目前为止你尝试过什么?你在哪里卡住?你能告诉我们你作为minimal reproducible exampleHow to Ask 的尝试吗?
  • 一个元素可以有多个类。所以 class="pending-task-value total" 可能比特定于总数的单个类更容易使用。
  • 编辑显示当前 HTML 和 javascript 之后的 HTML 期望结果。
  • 您已标记css;在这种情况下,您可以使用纯 CSS 样式吗?

标签: javascript html css class


【解决方案1】:

两种方法,取决于你是否事先知道 DOM 结构。

如果目标div 始终位于同一个DOM 位置,即容器内的第二个div,您可以使用document.querySelectorAll() 方法的索引来定位它vis- a-vis document.querySelectorAll('div.pending-task-value')[1].classList.add('pending-task-value-phone').

另一方面,如果事先不知道顺序,并且在您的示例中唯一的唯一属性是 CSS 属性,那么 Window.getComputedStyle() 方法可能会解决您的用例。 MDN

一种思考方式:

  1. 使用document.querySelectorAll()获取容器内的元素
  2. 对于每个匹配元素
    • 获取计算样式
    • 如果唯一属性值与目标值匹配,请使用Element.classList.add() 添加所需的类名

【讨论】:

  • 那么会是这样:let para = document.querySelector('div.pending-task-value'); let compStyles = window.getComputedStyle(background-color: rgb(232,188,13); Element.classList.add(pending-task-value-total);
【解决方案2】:

您可能不应该这样做 - 正确的方法是实际编辑底层 HTML 甚至 CSS 来完成此操作。使用这种方法可能会在未来增加额外的维护工作量,而将样式集中在适当的 CSS 文件中并将样式与 JavaScript 应用程序逻辑解耦会更简洁、更易于维护。

但是,您可以做的是向document.body 插入一个任意的&lt;style&gt; 块,该块使用:nth-child() CSS pseudo-class 实现CSS 规则来完成您似乎正在寻找的东西(假设.card-body .row 内的内容每次都以相同的顺序出现:

var styleElement = document.createElement('style');
styleElement.innerText = `
.card-body .row .pending-task-value-col:nth-child(1) .pending-task-value {
  background-color: #2B32B2 !important;
}

.card-body .row .pending-task-value-col:nth-child(2) .pending-task-value {
  background-color: #1488CC !important;
}

.card-body .row .pending-task-value-col:nth-child(3) .pending-task-value {
  background-color: #d63384 !important;
}`;
document.body.appendChild(styleElement);
<div class="card-body">
  <div class="row" style="text-align: center;">
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(232, 188, 13);"> 0
        <!---->
      </div>
      <div><i class="fas fa-tasks"></i></div>
      <div>Total Pending</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(47, 145, 211);"> 0
        <!---->
      </div>
      <div><i class="fas fa-phone"></i></div>
      <div>Phone</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(19, 152, 126);"> 0
        <!---->
      </div>
      <div><i class="fas fa-sms"></i></div>
      <div>SMS</div>
    </div>
  </div>
</div>
<hr />
<div class="card-body">
  <div class="row" style="text-align: center;">
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(232, 188, 13);"> 0
        <!---->
      </div>
      <div><i class="fas fa-tasks"></i></div>
      <div>Total Pending</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(47, 145, 211);"> 0
        <!---->
      </div>
      <div><i class="fas fa-phone"></i></div>
      <div>Phone</div>
    </div>
    <div class="col-4 pending-task-value-col">
      <div class="pending-task-value" style="background-color: rgb(19, 152, 126);"> 0
        <!---->
      </div>
      <div><i class="fas fa-sms"></i></div>
      <div>SMS</div>
    </div>
  </div>
</div>

【讨论】:

  • 这似乎在使用时不起作用或做任何事情,它们都以相同的顺序出现,但当我应用该代码时没有任何反应。
  • 我可以添加 CSS 样式,但例如,如果我对“.pending-task-value”进行 CSS 样式,它会将该颜色应用于所有这些项目,这不是我需要在这里做的.所以我真的需要用“.pending-task-value-1”替换“.pending-task-value”等等,这样我就可以独立地设置每个样式。
  • "我应用该代码时没有发生任何事情" 你能详细说明一下吗?上面的 sn-p 显然覆盖了您提供的内联样式属性。
猜你喜欢
  • 2015-01-11
  • 2014-04-18
  • 1970-01-01
  • 2011-05-21
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多