初级cv大师 2021-05-12 20:08 采纳率: 69.2%
浏览 2925
已采纳

Cannot read property 'querySelectorAll' of null

class Tab {
    constructor(id) {
        this.main = document.querySelector(id);
        this.lis = this.main.querySelectorAll('li');
        this.sections = this.main.querySelectorAll('section');
        this.init();
    }
    //初始化 让相关元素绑定事件
    init() {
        for (var i = 0; i < this.lis.length; i++) {
            this.lis[i].index = i;//自定义属性index
            this.lis[i].onclick = this.toggleTab;
        }
    }
    //1.切换功能
    toggleTab() {
        console.log(this.index);
    }
    //2.添加功能
    addTab() {

    }
    //3.删除功能
    removeTab() {

    }
    //4.修改功能
    editTab() {

    }
}
var tab = new Tab('.tabsbox');
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>面向对象 Tab</title>
    <link rel="stylesheet" href="css/tab.css">
    <link rel="stylesheet" href="css/style.css">
    <script src="js/tab.js"></script>
</head>

<body>

    <main>
        <h4>
            Js 面向对象 动态添加标签页
        </h4>
        <div class="tabsbox" id="tab">
            <!-- tab 标签 -->
            <nav class="fisrstnav">
                <ul>
                    <li class="liactive"><span>测试1</span><span class="iconfont icon-guanbi"></span></li>
                    <li><span>测试2</span><span class="iconfont icon-guanbi"></span></li>
                    <li><span>测试3</span><span class="iconfont icon-guanbi"></span></li>
                </ul>
                <div class="tabadd">
                    <span>+</span>
                </div>
            </nav>

            <!-- tab 内容 -->
            <div class="tabscon">
                <section class="conactive">测试1</section>
                <section>测试2</section>
                <section>测试3</section>
            </div>
        </div>
    </main>


</body>

</html>

  • 写回答

5条回答 默认 最新

  • CSDN专家-showbo 2021-05-12 20:37
    关注

    <script src="js/tab.js"></script>这块代码放到下面这个位置

    </main>

    <script src="js/tab.js"></script>

    </body>

     

     

    因为浏览器从上到下解析,放dom前面,这样dom未生成, document.querySelector(id)为null,所以你再调用querySelectAll就报错了。

     

    一定要放dom前面,var tab = new Tab('.tabsbox');放到window.onload(网页加载完毕后)事件中执行,这样DOM加载完就能获取到了

    window.onload=function(){

    var tab = new Tab('.tabsbox');

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。