鱼C论坛

 找回密码
 立即注册
查看: 230|回复: 3

我通过js修改了div的id属性,但是虽然id确实被改变了,样式却没有改变,这是为什么?

[复制链接]
发表于 2024-1-16 14:16:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我通过js修改了div的id属性,但是虽然id确实被改变了,样式却没有改变,这是为什么?
CSS
  1. #thisfloor{
  2.             position:fixed;
  3.             left:50px;
  4.             top:500px;
  5.             width:80px;
  6.             height:300px;
  7.             background-color:dimgray;
  8.         }

  9.         #thatfloor {
  10.             position: fixed;
  11.             left: 200px;
  12.             top: 500px;
  13.             width: 80px;
  14.             height: 300px;
  15.             background-color: red;
  16.         }
复制代码

HTML
  1. <div id="youxiye">  <!--界面-->
  2.         <div id="kid"></div>    <!--角色-->
  3.         <div id="thisfloor" onclick="creatFloor()"></div>  <!--此次地块-->
  4.         <div id="thatfloor"></div>  <!--下次地块-->
  5.     </div>
复制代码

js
  1.   //  生成此次地块和下次地块
  2.         var thisfloor = document.getElementById("thisfloor")
  3.         var thatfloor = document.getElementById("thatfloor")
  4.         var numbers = 1;

  5.         function creatFloor() {
  6.             numbers++;
  7.             if (numbers % 2 == 0) {
  8.                 thisfloor.id = "thatfloor"
  9.                 thatfloor.id = "thisfloor"
  10.             }
  11.             else {
  12.                 thisfloor.id = "thisfloor"
  13.                 thatfloor.id = "thatfloor"
  14.             }
  15.             console.log(thisfloor.id)
  16.         }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-16 14:17:14 | 显示全部楼层
在CSS中,样式选择器是根据元素的id属性来匹配元素的。当你修改了一个元素的id属性时,虽然在DOM中该元素的id已经改变了,但是CSS中的样式选择器仍然使用的是旧的id。

解决这个问题的方法是,在修改id属性后,同时修改对应元素的样式选择器。例如,在你的代码中,当修改thisfloor的id时,也要将CSS中的选择器修改为新的id。代码如下:

  1. function creatFloor() {
  2.     numbers++;
  3.     if (numbers % 2 == 0) {
  4.         thisfloor.id = "thatfloor"
  5.         thatfloor.id = "thisfloor"
  6.     }
  7.     else {
  8.         thisfloor.id = "thisfloor"
  9.         thatfloor.id = "thatfloor"
  10.     }

  11.     // 修改样式选择器
  12.     var thisfloorStyle = document.getElementById("thisfloor").style;
  13.     var thatfloorStyle = document.getElementById("thatfloor").style;
  14.     thisfloorStyle.cssText = thatfloorStyle.cssText;

  15.     console.log(thisfloor.id)
  16. }
复制代码


这样,无论id如何变化,样式都会正确地应用到对应的元素上。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-16 14:18:33 | 显示全部楼层
FishC 发表于 2024-1-16 14:17
在CSS中,样式选择器是根据元素的id属性来匹配元素的。当你修改了一个元素的id属性时,虽然在DOM中该元素的 ...

没有作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-16 14:18:52 | 显示全部楼层


抱歉,我给出的解决方案没有起作用。在JavaScript中改变元素的id属性不会自动更新CSS样式,但可以通过其他方式来实现。

一种解决方法是使用类选择器代替id选择器。您可以为要修改样式的div添加一个共同的class属性,并在CSS中使用类选择器来定义样式。然后使用JavaScript来切换这个class属性即可。以下是一个示例代码:

HTML代码:

  1. <div id="myDiv" class="original">Hello, world!</div>
复制代码


CSS代码:

  1. .original {
  2.   color: blue;
  3. }

  4. .modified {
  5.   color: red;
  6. }
复制代码


JavaScript代码:

  1. var myDiv = document.getElementById("myDiv");

  2. // 将原始class属性替换为modified
  3. myDiv.classList.remove("original");
  4. myDiv.classList.add("modified");
复制代码


这样,当您使用JavaScript切换class属性时,相关的CSS样式也会随之改变。

希望这次能帮到您!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 17:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表