首页 > 解决方案 > Javascript DOM 删除列表

问题描述

我正在尝试创建一个待办事项列表。

我正在尝试访问图标标签,以便能够单击图标以删除列表。

如何通过e.target在我的if条件下使用或其他方式专门针对删除图标?我删除了我的其他代码,比如添加任务等,只保留了删除的部分:

<div><i class="fas fa-trash-alt"></i></div> 

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript + DOM</title>
  <link rel="stylesheet" type=text/css href="style.css">
  <!-- Bootstrap Core CSS -->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
  <script src="https://kit.fontawesome.com/5f492e2f9c.js" crossorigin="anonymous"></script>
</head>
<body>


 <div class="container">
    <ul class="list-group">
      <div>
      <li class="list-group-item d-flex">Ivann
        <div class="custom-control custom-radio custom-control-inline ml-auto">
          <input type="radio" class="custom-control-input" id="defaultInline1" name="inlineDefaultRadiosExample">
          <label class="custom-control-label" for="defaultInline1">Yes</label>
        </div>

        <div class="custom-control custom-radio custom-control-inline">
          <input type="radio" class="custom-control-input" id="defaultInline2" name="inlineDefaultRadiosExample">
          <label class="custom-control-label" for="defaultInline2">No</label>
        </div>

        <div><i class="fas fa-trash-alt"></i></div>

      </li>
    </div>
    </ul>
</div>




<script type="text/javascript" src="oldapp.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</body>
</html>

JavaScript:

var ul = document.querySelector("ul");

function removeListAfterClick(e){
  
    
    if(e.target.parentElement.classList.contains('fa-trash-alt')){
      console.log('test');
    }
    
    e.preventDefault();
  
}
ul.addEventListener('click',removeListAfterClick);

标签: javascripthtmldom

解决方案


您在此处以事件的 parentElement 为目标,但您正在尝试访问目标子项。

querySelector 可以很好地浏览元素列表event.target.querySelector('.fa-trash-alt')

    var ul = document.querySelector('ul');
    const icon = document.querySelector('i.fa-trash-alt');
    const iconClass = "fas fa-trash-alt";
    
    function removeListAfterClick(e) {
      e.target.className.includes(iconClass) ? icon.remove() : null
      
      e.preventDefault();
    }
    ul.addEventListener('click', removeListAfterClick);
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>JavaScript + DOM</title>
    <link rel="stylesheet" type=text/css href="style.css">
    <!-- Bootstrap Core CSS -->
    <link
      rel="stylesheet"
      href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
      integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
      crossorigin="anonymous"
    />
    <script
      src="https://kit.fontawesome.com/5f492e2f9c.js"
      crossorigin="anonymous"
    ></script>
  </head>
  <body>
    <div class="container">
      <ul class="list-group">
        <div>
          <li class="list-group-item d-flex">
            Ivann
            <div
              class="custom-control custom-radio custom-control-inline ml-auto"
            >
              <input
                type="radio"
                class="custom-control-input"
                id="defaultInline1"
                name="inlineDefaultRadiosExample"
              />
              <label class="custom-control-label" for="defaultInline1"
                >Yes</label
              >
            </div>

            <div class="custom-control custom-radio custom-control-inline">
              <input
                type="radio"
                class="custom-control-input"
                id="defaultInline2"
                name="inlineDefaultRadiosExample"
              />
              <label class="custom-control-label" for="defaultInline2"
                >No</label
              >
            </div>

            <div><i class="fas fa-trash-alt"></i></div>
          </li>
        </div>
      </ul>
    </div>
  </body>

</html>


推荐阅读