简体   繁体   English

使用 javascript 将子元素添加到父元素

[英]Adding child element to a parent element using javascript

I am trying to add a child element to a parent element as follows:我正在尝试将子元素添加到父元素,如下所示:

  • li to be added to ul li要添加到ul
  • Either when the enter button is clicked or the enter key on the keyboard is pressed, a new li and delete button should get added to ul .当点击 enter 按钮或按下键盘上的 enter 键时,应该将一个新的lidelete按钮添加到ul

My code isn't working right.我的代码工作不正常。 Can someone help me with this, please?有人可以帮我解决这个问题吗?

HTML: HTML:

<h1>Simple Add/Remove Task</h1>
<h2>To do List</h2>

<input type="text" placeholder="enter your tasks" id="userInput">
<button id="enter">Enter</button>
<ul>
  <li class="todos">Wake up <button>Delete</button></li>
  <li class="todos">Study<button>Delete</button></li> 
</ul>

CSS: CSS:

.done {
  text-decoration: line-through;
}

Javascript: Javascript:

var listItems = document.querySelectorAll(".todos");
var input = document.getElementById("userInput");
var ul = document.querySelectorAll("ul");
var button = document.getElementById("enter");

button.addEventListener("click", function(){
  if(input.value.length>0){
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(input.value));
    ul.appendChild(li);
    input.value = "";
  }
});

input.addEventListener("keypress", function(){
  if(input.value.length > 0 && event.which === 13){
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(input.value));
    ul.appendChild(li);
    input.value = "";
  }
});

for (var i = 0; i<listItems.length; i++){
  listItems[i].addEventListener("click", function(){
    this.classList.toggle("done");
  });
}

querySelectorAll returns NodeList. querySelectorAll返回节点列表。 NodeList does not contain appendChild method. NodeList 不包含 appendChild 方法。 So either try to replace ul.appendChild with ul[0].appendChild or just refactor your code因此,要么尝试用ul[0].appendChild替换ul.appendChild ,要么重构你的代码

This solution modifies your item-adding code to include a delete button (and refactors the code into a dedicated function.)此解决方案修改您的项目添加代码以包含删除按钮(并将代码重构为专用的 function。)

All delete buttons ( marked with a "delete-btn" class ) trigger list-item removal.所有删除按钮(标有“delete-btn” class )触发列表项删除。 (The click event bubbles up to the ul, where the listener is attached.) (点击事件冒泡到 ul,监听器所在的位置。)

See the in-code comments for further explanation.请参阅代码内注释以获取更多说明。

 // Identifies DOM elements const listItems = document.querySelectorAll(".todos"), input = document.getElementById("userInput"), ul = document.getElementById("the-list"), // (NOT `querySelectorAll`) button = document.getElementById("enter"); // Conditionally calls addItem function when button is clicked button.addEventListener("click", function() { if (input.value.length > 0) { addItem(); } }); // Conditionally calls addItem function when ENTER is pressed input.addEventListener("keypress", function() { if (input.value.length > 0 && event.which === 13){ addItem(); } }); // Adds an item to the list (when called by either listener) function addItem(){ const li = document.createElement("li"), txt = document.createTextNode(input.value), btn = document.createElement("button"); // Puts txt & btn inside li li.appendChild(txt); btn.textContent = "Delete"; btn.classList.add("delete-btn"); // For later reference li.appendChild(btn); ul.appendChild(li); // Puts li inside ul input.value = ""; // Clears input } // Listens for clicks on the `ul` or its descendants, even if the // clicked element gets dynamically added later ul.addEventListener("click", function(event) { // Listeners can automatically access triggering events const clickedElement = event.target; // Events have a target property if(clickedElement.classList.contains("delete-btn")){ // Finds ancestor elements and removes li from ul const li = clickedElement.closest("li"), ul = li.closest("ul"); ul.removeChild(li); // (Or we could add "done" to li's classList) } });
 .delete-btn{ margin-left: 1em; } /*.done { text-decoration: line-through; } */
 <h1>Simple Add/Remove Task</h1> <h2>To do List</h2> <input type="text" placeholder="enter your tasks" id="userInput"> <button id="enter">Enter</button> <ul id="the-list"> <li class="todos">Wake up<button class="delete-btn">Delete</button></li> <li class="todos">Study<button class="delete-btn">Delete</button></li> </ul>

Change this,改变这个,

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

to this,对此,

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

As you have only one ul in your html.因为您的 html 中只有一个ul

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM