请问老师...

请问老师...

<span id='span' class='span'>★★★</span>今日特卖<span id='span' class='span'>★★★</span>

请问老师,如何用for循环把两个span都取出来,然后通过stye.color来同时改变星星的颜色??

 var sp=document.getElementsByClassName('span')

        var time=setInterval(function () {

        for (var i = 0; i < sp.length; i++) {

            if(sp[i].style.color='red'){

                sp[i].style.color='green'

                if(sp[i].style.color='green'){

                    sp[i].style.color='red'

                }

            }

            

        } 

    }, 1000)

不知道该如何写,我的想法是判断当为红就变绿,当绿变红,但是这样写不对。求解

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好。

1、在代码中,没有给span标签设置color样式,所以获取不到。

2、通过js获取在style标签内设置的css样式需要使用window.getComputedStyle(element)方法来实现。例如:

http://img1.sycdn.imooc.com//climg/5f58ba0109ff075e08940356.jpg

结果显示:

http://img1.sycdn.imooc.com//climg/5f58ba0d092dea3802210055.jpg

如果帮助到了你,欢迎采纳,祝学习愉快~

好帮手慕鹤 2020-09-09 13:50:38

同学你好,代码中有两个问题:

1、一开始这个span标签的color是没有值的,可以使用console.log(sp[i].style.color)来查看,控制台输出的是空的,如下:

http://img1.sycdn.imooc.com//climg/5f586bcd09e253b003620025.jpg

http://img1.sycdn.imooc.com//climg/5f586be0094722aa03010027.jpg

2、因为一开始span标签的color是没有值的,所以进入不了if..else if语句,导致页面没有效果,建议:代码中再添加else{ sp[i].style.color = 'green';},当上面的条件都没有执行的时候,给span标签的color添加一个颜色值,这样再进行下一轮for循环的时候,span的color就有了值,然后再进入if...else if语句来判断并执行里面的代码块,例:

http://img1.sycdn.imooc.com//climg/5f586ca909db595206560263.jpg

如果帮助到了你,欢迎采纳,祝学习愉快~

  • 你好老师,试了下可以了,有个地方不明白,为什么CSS设置的红色,第一次sp[i].style.color确实空值呢?JS里的代码和CSS里设置的样式不相关吗?
    2020-09-09 18:51:06
好帮手慕鹤 2020-09-09 11:09:31

同学你好,代码中有以下几个问题:

1、在if判断中,写的是一个“=”,这是赋值的意思,赋值语句在判断中永远成立,所以页面中一直显示的是红色,如下:

http://img1.sycdn.imooc.com//climg/5f58441209f5155206300044.jpg

进行if语句的判断,应该是“==”或者是“===”来进行。

2、判断当span为红色就变绿色,当span为绿色就变红色,参考如下:

http://img1.sycdn.imooc.com//climg/5f58454109efcace07850405.jpg

当代码执行到第一个if语句的时候,如果if语句里面的条件成立span的颜色为红色时,执行里面的代码块,span的颜色变为绿色;通过continue跳过当次循环中剩下的语句,执行下一次for循环。

当第一个if语句不成立的时候,直接读取下面的sp[i].style.color = 'green';那么第二个语句里面的条件是成立的,执行里面的代码块,span的颜色变为红色,再通过continue跳过当次循环中剩下的语句,执行下一次for循环。

这样就形成了红色绿色变换的效果。

如果帮助到了你,欢迎采纳,祝学习愉快~

  • 原来要这么写,请问老师,如果用else if判断,是不是第一次if判断成功就不会再执行下面else if的判断了?我自己这么写不会执行,应该怎么改? for (var i = 0; i < sp.length; i++) { if (sp[i].style.color == 'red') { sp[i].style.color = 'green'; } else if (sp[i].style.color == 'green') { sp[i].style.color = 'red'; } }
    2020-09-09 11:31:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师