老师你好,询问以下关于 this 指向问题

老师你好,询问以下关于 this 指向问题

这个作业我写完之后,在 IE8 或者 IE7 下测试,发现点击导航条变换激活状态的时候,this 在 IE8、7 下是无法正确指向的,输出控制台发现其似乎指向到了 window 上,然后我尝试使用如下方法,去完成了兼容,但是怎么看都觉得并不是很好的写法,请问如何能让 IE8、7 的 this 属性正确指向当前元素?

且还想问下,目前已经 2019 年,是否还有必要兼容 IE9 以下浏览器,毕竟微软自己都已经放弃了。

for (var i = 0; i < navsLength; i++) {
    navs[i].setAttribute("data-id", String(i));
    EventsHandler.addHandler(navs[i], "click", function (e) {
        if (this.getAttribute) {
            // IE8 以上,this 能正确指向
            index = this.getAttribute("data-id")
        } else {
            // IE8 IE7 this 无法正确指向,且无法正确识别自定义属性 `data-id`
            var ieElm = e.srcElement;
            for (var b = 0; b < navsLength; b++) {
                if (ieElm.innerText === navs[b].innerText) {
                    index = b;
                }
            }
        }
        changeNavImage(index);
    })
}


正在回答 回答被采纳积分+1

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

2回答
好帮手慕言 2019-07-26 19:48:09

同学你好,老师测试的是没有问题的

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

浏览器:
http://img1.sycdn.imooc.com//climg/5d3ae86c00010da518660660.jpg

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

好帮手慕言 2019-07-26 11:08:29

同学你好,低版本的IE是支持的,只是解析出来的形式不一样。

老师在IE8及以下版本测试,效果都是正常的。同学提供的else里面的代码在IE8及以下也没有执行。

同学可以在else里面打印一下看看是否会输出。

现在公司也有兼容低版本的IE,但是是很少的一部分

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

  • 提问者 秋荏苒 #1
    老师你好,我用的是 IE 11 然后选择的是仿真里面的文档类型,如果不写 else 语句,8和 7 都会提示,`SCRIPT438: 对象不支持“getAttribute”属性或方法`
    2019-07-26 17:15:36
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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