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

如何将元素当前CSS值存入变量且不受元素样式变更影响?

解决jQuery中存储元素原始CSS值被覆盖的问题

我明白你遇到的困扰了——你想用jQuery保存表格行的原始背景色,结果发现鼠标在不同行之间移动时,之前存的颜色总是被覆盖,导致移出时恢复的颜色完全不对。这其实是因为你用了共享的全局变量或者统一的存储容器,所有行都在修改同一个值,自然会互相干扰。

问题根源

你的初始代码里用了全局变量currentColor,所有<tr>元素hover时都会更新这个变量的值。比如先hover红色行,变量存了红色;接着hover绿色行,变量就被改成绿色了。这时候再移出红色行,它会去取currentColor里的绿色,结果自然出错。

后来尝试的.data()方法也踩了同样的坑:你把所有行的颜色都存在同一个<div>的data里,后面的行直接覆盖了前面的存储值,最终还是拿不到当前行的原始颜色。

正确解决方案:给每个元素单独存储原始值

我们需要把每个<tr>的原始背景色存在它自己的data属性里,这样每个元素的存储是独立的,不会被其他行的操作干扰。代码如下:

$("tr").hover(function () {
  // 只在第一次hover时存储原始颜色,避免重复覆盖
  if (!$(this).data("originalColor")) {
    $(this).data("originalColor", $(this).css("background-color"));
  }
  $(this).css("background-color", "#f7f7f7");
}).mouseout(function () {
  // 从当前元素的data中取出自己的原始颜色
  $(this).css("background-color", $(this).data("originalColor"));
});

对应的HTML结构保持不变:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr style="background-color:#FF0000"><td>Foo</td></tr>
  <tr style="background-color:#00FF00"><td>Foo</td></tr>
  <tr style="background-color:#0000FF"><td>Foo</td></tr>
</table>

代码说明

  • 鼠标hover到某一行时,先检查这行是否已经存储过原始颜色:如果没有,就把它当前的背景色存在自己的originalColor data属性里。
  • 然后将背景色切换为hover状态的#f7f7f7。
  • 鼠标移出时,直接从当前行的data中取出它自己的原始颜色,恢复回去。

这样每个行的原始颜色都独立存储,不会被其他行的操作影响,完美解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:54:14