You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jQuery为.dot及其:after伪元素设置不同背景色?

如何用jQuery为.dot和它的:after伪元素设置不同背景色

嘿,这个问题其实挺典型的——伪元素(比如:after)并不是DOM中的实际节点,所以jQuery的.css()方法没法直接选中它们修改样式。不过有几种实用的解决方案,我给你详细说说:

方法1:使用CSS自定义属性(推荐)

这是最简洁、易维护的方式,利用CSS变量来关联元素和伪元素的样式:

第一步:修改你的CSS代码,用变量替换固定背景色

.dot { 
  position: relative; 
  height: 16px; 
  width: 16px; 
  border-radius: 50%; 
  background: var(--dot-bg, #ccc); /* 定义变量,可选默认值 */
} 
.dot:after { 
  content: ""; 
  position: absolute; 
  top: 3px; 
  left: 3px; 
  height: 10px; 
  width: 10px; 
  border-radius: 50%; 
  animation: pulse 2s infinite; 
  transform-origin: center center; 
  background: var(--dot-after-bg, #999); /* 伪元素的变量 */
}
@keyframes pulse { 
  0% { transform: scale(1); opacity: 1; } 
  25% { transform: scale(1); opacity: 1; } 
  100% { transform: scale(4.5); opacity: 0; } 
}

第二步:在jQuery中设置这两个CSS变量

直接通过.css()方法给.dot元素设置变量,伪元素会自动继承使用这些变量值:

function test_connection(){ 
  var target=$(".dot"); 
  $.ajax({ 
    type:'POST', 
    url: '/test_connection.php', 
    cache:'false', 
    timeout: 5000, 
    success: function(a){ 
      inter=setTimeout(test_connection,15000); 
      // 同时设置主元素和伪元素的背景色
      target.css({
        "--dot-bg": "#77d804",
        "--dot-after-bg": "#55a802" // 替换成你需要的伪元素背景色
      }).html("<span data-toggle='tooltip' data-placement='bottom' data-original-title='Edit'></span>"); 
      connection=true; 
    }, 
  }); 
}

方法2:动态添加/切换CSS类

如果你的背景色是固定的几种状态(比如成功、失败),用类切换更清晰:

第一步:在CSS中定义状态类

/* 保留原基础样式 */
.dot { /* 原样式不变 */ }
.dot:after { /* 原样式不变 */ }

/* 连接成功的状态类 */
.dot.connection-success {
  background: #77d804;
}
.dot.connection-success:after {
  background: #55a802;
}

/* 可选:添加失败状态类备用 */
.dot.connection-failed {
  background: #ff4444;
}
.dot.connection-failed:after {
  background: #cc0000;
}

第二步:在jQuery中切换类

function test_connection(){ 
  var target=$(".dot"); 
  $.ajax({ 
    type:'POST', 
    url: '/test_connection.php', 
    cache:'false', 
    timeout: 5000, 
    success: function(a){ 
      inter=setTimeout(test_connection,15000); 
      // 移除其他状态类,添加成功类
      target.removeClass("connection-failed")
            .addClass("connection-success")
            .html("<span data-toggle='tooltip' data-placement='bottom' data-original-title='Edit'></span>"); 
      connection=true; 
    },
    error: function() {
      // 请求失败时切换到失败类
      target.removeClass("connection-success")
            .addClass("connection-failed");
      connection=false;
    }
  }); 
}

方法3:动态创建内联样式表

如果需要完全动态的颜色值(比如从后端接口返回自定义颜色),可以动态生成样式规则:

function test_connection(){ 
  var target=$(".dot"); 
  $.ajax({ 
    type:'POST', 
    url: '/test_connection.php', 
    cache:'false', 
    timeout: 5000, 
    success: function(a){ 
      inter=setTimeout(test_connection,15000); 
      
      // 创建或复用内联样式表
      let styleSheet = document.querySelector('#dot-dynamic-style') || document.createElement('style');
      if (!styleSheet.id) styleSheet.id = 'dot-dynamic-style';
      
      // 写入样式规则
      styleSheet.textContent = `
        .dot { background: #77d804 !important; }
        .dot:after { background: #55a802 !important; }
      `;
      document.head.appendChild(styleSheet);
      
      target.html("<span data-toggle='tooltip' data-placement='bottom' data-original-title='Edit'></span>"); 
      connection=true; 
    }, 
  }); 
}

总结

  • 优先选方法1(CSS变量),代码简洁且符合现代CSS规范;
  • 如果是固定状态切换,**方法2(类切换)**更易维护;
  • 动态颜色场景用方法3(内联样式表)。

内容的提问来源于stack exchange,提问作者Martinovska

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:16:18