为了账号安全,请及时绑定邮箱和手机立即绑定

无法获得具有特定类名的正确按钮数量

无法获得具有特定类名的正确按钮数量

慕尼黑8549860 2022-01-01 20:41:48
我想计算 div 中按钮的数量,我从 js 文件动态添加按钮。当我在浏览器上运行程序时,按钮显示正确,当我从浏览器检查代码时,所有元素和类名都是正确的。但是,当我尝试记录类名称为“手风琴”的按钮数量时,它在应该返回 4 时返回 0。这是 HTML 代码:<body class="d-flex justify-content-center" style="width: 100%;height: 50%;"><div class="container" style="width: 500px;"><img src="assets/img/header_image.png" style="width: 100%;">            <div class="row" style="margin-top: 20px;">        <div id="accordion-div" class="col">                                                    </div>    </div></div><script src="assets/js/jquery.min.js"></script><script src="assets/bootstrap/js/bootstrap.min.js"></script><script src="index.js"></script>javascript代码:var acc = document.getElementsByClassName("accordion");var acc_div = document.getElementById("accordion-div")var i;add_accordion_item = (name, details) => {    var btn = document.createElement('button');    acc_div.appendChild(btn);    btn.innerHTML = name;    btn.className += "btn btn-success accordion";    btn.type = "button"    var details = document.createElement('div');    acc_div.appendChild(details);    details.innerHTML = details    details.className += "panel"}url = '.....'make_list = () => {    $.getJSON(url, function(data){                  for(var i = 0; i<data["number_of_threats"]; i++){                    name = data["info"][i]["name"];                      details = "details"            add_accordion_item(name, details);        }    });}make_list()console.log(document.getElementsByClassName("accordion").length)for (i = 0; i < acc.length; i++) {    acc[i].addEventListener("click", function() {        this.classList.toggle("active");        var panel = this.nextElementSibling;        if (panel.style.display === "block") {            panel.style.display = "none";        } else {            panel.style.display = "block";        }    });}这应该显示一个按钮,按下时它应该显示带有详细信息的 div。但是 for 从不运行,因为 acc.length 为 0。
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

我认为节点数组没有长度属性。


你应该使用 forEach 而不是 for 循环


acc.forEach(function(element) {

    element.addEventListener("click", function() {

       this.classList.toggle("active");

       var panel = this.nextElementSibling;

       if (panel.style.display === "block") {

           panel.style.display = "none";

       } else {

         panel.style.display = "block";

       }

    });

  })

我希望它能帮助你


查看完整回答
反对 回复 2022-01-01
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我认为您没有accordion为任何元素添加一个类。因为我accordion在您的 html 代码中看不到任何具有类名的元素。但是在你的 javascriptcode 里面,在第一行你试图搜索一个类名为accordion.


查看完整回答
反对 回复 2022-01-01
?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

变量acc在开始声明后不会自动更新。


您将需要acc在 for 循环上方再次检索变量的值。即在 for 循环上方,您需要添加这样的行


acc = document.getElementsByClassName("accordion");


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


....


查看完整回答
反对 回复 2022-01-01
  • 3 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号