受信したテスト問題データから Web ページのテスト用紙を自動的に生成します

最終レンダリング:
画像の説明を追加してください
コード:

 <div class="box">
        <h2>在线考试</h2>
        <h3>一、选择器</h3>
        <!-- 考试题 -->
        <div class="exam_box">
            <!-- 项目 -->
            <!-- <div class="item"> -->
            <!-- 问题 -->
            <!-- <div class="question_box">
                    1. 唐太宗的名字叫?
                </div> -->
            <!-- 答案 -->
            <!-- <div class="answer_box">
                    <ul>
                        <li class="active">A.李渊</li>
                        <li>B.李世民</li>
                        <li>C.李治</li>
                        <li>D.武则天</li>
                    </ul>
                </div> -->
            <!-- </div> -->
        </div>

        <!-- 按钮 -->
        <button>提交试卷</button>

        <!-- 考试成绩 -->
        <p class="exam_result">考试的成绩 <span class="exam_score"></span></p>
    </div>

試験データ:

        let data = [
            {
    
    
                "q": "1.唐太宗的名字叫?",
                "options": [
                    {
    
    
                        "name": "A.李渊"
                    },
                    {
    
    
                        "name": "B.李世民"
                    },
                    {
    
    
                        "name": "C.李治"
                    },
                    {
    
    
                        "name": "D.武则天"
                    }
                ],
                "score": 20,
                "answer": "B"
            },
            {
    
    
                "q": "2.唐太宗把文成公主嫁给吐蕃族首领叫什么?",
                "options": [
                    {
    
    
                        "name": "A.囊日论赞"
                    },
                    {
    
    
                        "name": "B.朗达玛"
                    },
                    {
    
    
                        "name": "C.松赞干布"
                    },
                    {
    
    
                        "name": "D.扎西邹巴"
                    }
                ],
                "score": 20,
                "answer": "C"
            },
            {
    
    
                "q": "3.1661年,收复了台湾的民族英雄是谁?",
                "options": [
                    {
    
    
                        "name": "A.郑成功"
                    },
                    {
    
    
                        "name": "B.戚继光"
                    },
                    {
    
    
                        "name": "C.林则徐"
                    },
                    {
    
    
                        "name": "D.李元芳"
                    }
                ],
                "score": 20,
                "answer": "A"
            },
            {
    
    
                "q": "4.我国历史上的第一个皇帝是?",
                "options": [
                    {
    
    
                        "name": "A.禹"
                    },
                    {
    
    
                        "name": "B.姬发"
                    },
                    {
    
    
                        "name": "C.秦始皇"
                    },
                    {
    
    
                        "name": "D.刘备"
                    }
                ],
                "score": 20,
                "answer": "C"
            },
            {
    
    
                "q": "5.被后人尊奉为中华民族“人文始祖”的是?",
                "options": [
                    {
    
    
                        "name": "A.黄帝"
                    },
                    {
    
    
                        "name": "B.伏羲"
                    },
                    {
    
    
                        "name": "C.炎帝"
                    },
                    {
    
    
                        "name": "D.以上都是"
                    }
                ],
                "score": 20,
                "answer": "D"
            }
        ];
<script>
        // 要求:
        // 1. 创建一个名为Page的class对象
        // 2. 该对象在实例化时可以接受试卷数据作为参数
        // 3. Page class的实例可以调用init初始化方法,将试卷数据通过DOM操作渲染在页面上成为网页试卷
        // 4. 点击选择题的答案选项,背景高亮,再次点击,取消选择答案
        // 5. 所有选择题都勾选了,才可以提交试卷,否则,不可以提交试卷
        // 6. 当点击提交试卷,延迟300ms后,根据试卷数据提供的答案计算成绩并显示考试结果

        class Page {
    
    
            // 2. 该对象在实例化时可以接受试卷数据作为参数
            constructor(data) {
    
    
                this.data = JSON.parse(JSON.stringify(data));
                // console.log(data[0].options[0].name);
            }

            // 3. 将试卷数据通过DOM操作渲染在页面上成为网页试卷
            init() {
    
    
                var exam_box = document.querySelector(".exam_box");
                for (var i = 0; i < 5; i++) {
    
    
                    var item = document.createElement("div");
                    item.classList.add('item');
                    item.innerHTML = `
                <div class="question_box">
                    ${
      
      data[i].q}
                </div>
                <div class="answer_box">
                    <ul>
                        <li class="active">${
      
      data[i].options[0].name}</li>
                        <li>${
      
      data[i].options[1].name}</li>
                        <li>${
      
      data[i].options[2].name}</li>
                        <li>${
      
      data[i].options[3].name}</li>
                    </ul>
                </div>`;
                    exam_box.appendChild(item);
                }

            }

        }

        

        const app = new Page(data);
        app.init();

        // 4. 点击选择题的答案选项,背景高亮,再次点击,取消选择答案
        var li = document.querySelectorAll("li");
        var t = 0;
        for (var i = 0; i < li.length; i++) {
    
    
            li[i].onclick = function () {
    
    
                if (this.getAttribute('class') && t == 0) {
    
    
                    t = 1;
                    // console.log("已高亮");
                    // console.log("t==>", t);
                    this.classList.remove('active');
                } else {
    
    
                    t = 0;
                    // console.log("未高亮");
                    // console.log("t==>", t);
                    for (var m = 0; m < this.parentElement.children.length; m++) {
    
    
                        if (this.parentElement.children[m].getAttribute('class')) {
    
    
                            this.parentElement.children[m].classList.remove('active');
                        }
                    }

                    this.classList.add('active');

                }
            }
        }

        // 5. 所有选择题都勾选了,才可以提交试卷,否则,不可以提交试卷
        var button = document.querySelector("button");
        button.onclick = function () {
    
    
            var active = document.querySelectorAll(".active");
            if (active.length < 5) {
    
    
                alert("请选择答案再提交!");
            }

            // 6. 当点击提交试卷,延迟300ms后,根据试卷数据提供的答案计算成绩并显示考试结果
            // 获取当前选择的答案
            var answers = document.querySelectorAll(".active");
            var sum = 0;
            for (var n = 0; n < answers.length; n++) {
    
    
                // console.log(active[n].innerHTML[0]);
                // console.log(app.data[n].answer);
                if (active[n].innerHTML[0] === app.data[n].answer) {
    
    
                    sum += 20;
                }
            }
            setTimeout(function () {
    
    
                var score = document.querySelector(".exam_score");
                score.innerHTML = sum;
            }, 300)

        }

        // B C A C D
    </script>

おすすめ

転載: blog.csdn.net/amercury0818/article/details/131569389