如何使用for in循环使减号图标消失

How to make minus icon disappear using for in loop

当点击保存按钮时,函数 myfunc2 将被执行,它使用 for in 循环迭代减号数组。该数组包含所有减号图标。我设置 style.display = 'none' 并期望当我单击保存按钮时图标会消失,但它没有用。我不知道出了什么问题

const minus = document.getElementsByClassName('minus');
const item = document.getElementsByClassName('item');
const input = document.getElementsByTagName('input');
//right
const save_btn = document.getElementById('save');

save_btn.addEventListener('click',myfunc2);
//delete all minus 
function myfunc2() {
    for(let x in minus) {
        minus[x].style.display = 'none';
    }
}
* {
    box-sizing: border-box;
}
.fa {
    padding: 5px;
    border-radius: 50%;
    border: 1px solid blue;
}
.item {
    gap: 10px;
}
a:hover {
    cursor: pointer;
}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!--font awe-->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <!--bs-->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <!--js-->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container mt-3">
        <h1>Bucket list</h1>
        <button type="submit" class="btn btn-primary mb-3">Add item</button>
        <form>
            <!--d-flex overide item-->
            <div class="item d-flex mb-3">
                <input type="text" class="form-control form-control">
                <a href="#" class="minus"><i class="fa fa-minus"></i></a>
                <a href="#"><i class="fa fa-pencil"></i></a>
            </div>
            <div class="item d-flex mb-3">
                <input type="text" class="form-control form-control">
                <a href="#" class="minus"><i class="fa fa-minus"></i></a>
                <a href="#"><i class="fa fa-pencil"></i></a>
            </div>
            <div class="item d-flex mb-3">
                <input type="text" class="form-control form-control">
                <a href="#" class="minus"><i class="fa fa-minus"></i></a>
                <a href="#"><i class="fa fa-pencil"></i></a>
            </div>
            <button type="submit" class="btn btn-success save">Save</button>
            <button type="submit" class="btn btn-danger">Edit</button>
        </form>
    </div>
    <script src="js.js"></script>
</body>
</html>

您有 2 处做错了。首先,

const save_btn = document.getElementByClassName('save');

应该是

const save_btn = document.getElementsByClassName('save');

其次,save_btn 现在是一个数组,因为您已经通过 class 名称(因此是 getElementsByClassName)复数形式获得了多个元素。

The getElementsByClassName method of Document interface returns an array-like object of all child elements which have all of the given class name(s). (doc)

所以调用 save_btn.addEventListener('click',myfunc2); 是行不通的,因为您正试图将其分配给一个数组。你要么使用

save_btn[0].addEventListener('click',myfunc2);

或者,更推荐的方法是给按钮一个 id 并使用 getElementById() (doc)

更改了以下代码段:

const minus = document.getElementsByClassName('minus');
const item = document.getElementsByClassName('item');
const input = document.getElementsByTagName('input');
//right
const save_btn = document.getElementById('saveBtn');

save_btn.addEventListener('click', myfunc2);
//delete all minus 
function myfunc2() {
  [].forEach.call(minus, function(m) {
    m.style.display = 'none';
  });
}
* {
  box-sizing: border-box;
}

.fa {
  padding: 5px;
  border-radius: 50%;
  border: 1px solid blue;
}

.item {
  gap: 10px;
}

a:hover {
  cursor: pointer;
}
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!--font awe-->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
  <!--bs-->
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <!--js-->
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <div class="container mt-3">
    <h1>Bucket list</h1>
    <button type="submit" class="btn btn-primary mb-3">Add item</button>
    <form>
      <!--d-flex overide item-->
      <div class="item d-flex mb-3">
        <input type="text" class="form-control form-control">
        <a href="#" class="minus"><i class="fa fa-minus"></i></a>
        <a href="#"><i class="fa fa-pencil"></i></a>
      </div>
      <div class="item d-flex mb-3">
        <input type="text" class="form-control form-control">
        <a href="#" class="minus"><i class="fa fa-minus"></i></a>
        <a href="#"><i class="fa fa-pencil"></i></a>
      </div>
      <div class="item d-flex mb-3">
        <input type="text" class="form-control form-control">
        <a href="#" class="minus"><i class="fa fa-minus"></i></a>
        <a href="#"><i class="fa fa-pencil"></i></a>
      </div>
      <button type="button" id="saveBtn" class="btn btn-success save">Save</button>
      <button type="submit" class="btn btn-danger">Edit</button>
    </form>
  </div>
  <script src="js.js"></script>
</body>

</html>