簡體   English   中英

Classlist 方法給出 typeerror

[英]Classlist method gives typerror

因此,我正在嘗試制作一個簡單的待辦事項列表,並且我正在嘗試選擇所有 li 標簽,因此當單擊 li 標簽時,它會將其划掉並顯示一個復選標記但我收到一條錯誤消息,提示 Uncaught TypeError: Cannot read在 HTMLLIElement.onclick (index.html:12:33) 檢查 (script.js:11:18) 時未定義的屬性(讀取“添加”)

 const addBtn = document.getElementById("addBtn"); const inputEl = document.getElementById("myInput"); const li = document.getElementsByClassName("li") addBtn.addEventListener("click", () => { myUl.innerHTML += `<li>${inputEl.value}</li>` }) check = () => { li.classList.add("checked") }
 * { box-sizing: border-box; } /* Remove margins and padding from the list */ ul { margin: 0; padding: 0; } /* Style the list items */ ul li { cursor: pointer; position: relative; padding: 12px 8px 12px 40px; background: #eee; font-size: 18px; transition: 0.2s; /* make the list items unselectable */ -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } /* Set all odd list items to a different color (zebra-stripes) */ ul li:nth-child(odd) { background: #f9f9f9; } /* Darker background-color on hover */ ul li:hover { background: #ddd; } /* When clicked on, add a background color and strike out text */ ul li.checked { background: #888; color: #fff; text-decoration: line-through; } /* Add a "checked" mark when clicked on */ ul li.checked::before { content: ''; position: absolute; border-color: #fff; border-style: solid; border-width: 0 2px 2px 0; top: 10px; left: 16px; transform: rotate(45deg); height: 15px; width: 7px; } /* Style the close button */ .close { position: absolute; right: 0; top: 0; padding: 12px 16px 12px 16px; } .close:hover { background-color: #f44336; color: white; } /* Style the header */ .header { background-color: #f44336; padding: 30px 40px; color: white; text-align: center; } /* Clear floats after the header */ .header:after { content: ""; display: table; clear: both; } /* Style the input */ input { margin: 0; border: none; border-radius: 0; width: 75%; padding: 10px; float: left; font-size: 16px; } /* Style the "Add" button */ #addBtn { padding: 10px; width: 25%; background: #d9d9d9; color: #555; float: left; text-align: center; font-size: 16px; cursor: pointer; transition: 0.3s; border-radius: 0; } .addBtn:hover { background-color: #bbb; }
 <h2>My To Do List</h2> <input type="text" id="myInput"> <span id="addBtn">Add</span> <link rel="stylesheet" href="index.css"> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> </div> <ul id="myUL"> <li onclick="check()">Hit the gym</li> <li class="checked">Pay bills</li> <li onclick="check()">Meet George</li> <li onclick="check()">Buy eggs</li> <li onclick="check()">Read a book</li> <li onclick="check()">Organize office</li> </ul> <script src="script.js"> </script>

getElementsByClassName()返回匹配元素的節點列表(集合)。 classList是單個元素的屬性。 為了使用它,您必須僅在一個元素上調用它。

備擇方案:

  1. 使用.querySelector(.[className])返回與選擇器匹配的第一個元素。
  2. 通過傳遞索引 ( li[0] ) 訪問其中一個集合項。
  3. 循環遍歷集合並在循環時對每個項目調用 classList。

另外, 首先不要使用.getElementsByClassName()因為它會返回導致性能問題的“活動節點列表”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM