将函数的逻辑应用于最初不在HTML脚本中的新创建的HTML

我已经为跟踪日常任务的小型应用程序编写了一些代码。我正在使用id = 'active'克隆节点,该节点具有将其传输到另一列的按钮。用于执行此操作的逻辑不适用于从createNewButton1创建的新克隆节点。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <meta http-equiv="x-ua-compatible" content="ie=edge" />
    <title>Project Board</title>
    <link rel="stylesheet" href="assets/styles/app.css" />
    <script src="assets/scripts/app.js" defer></script>
  </head>
  <body>
  
    <header id="main-header">
      <h1>Project Planner</h1>
    </header>

  <div>
    <section id="active">
      <header>
        <h2>Days</h2>
      </header>
      <ul>
        <li
          id="p4"
          data-extra-info="Super important conference! Fictional but still!"
          class="card"
        >
          <h2>Monday</h2>
        </li>
    </ul>
 </section>
Class ProjectItem {
  constructor(id,updateProjectListsFunction,type) {
    this.id = id;
    this.updateProjectListsHandler = updateProjectListsFunction;
    this.connectMoreInfoButton();
    this.connectSwitchButton(type);
    this.createNewButton1();
  }

  createNew () {
    const newItem = document.getElementById('active').querySelector('li');
    const cln = newItem.cloneNode(true);
    document.getElementById('active').appendChild(cln);
  }


createNewButton1 () {

  const addNewButton = document.getElementById('addButton');
    addNewButton.addEventListener( 'click',this.createNew);
}

导致切换到另一列的按钮使用事件侦听器,这不适用于新克隆的节点。

connectSwitchButton(type) {
    const projectItemElement = document.getElementById(this.id);
    let switchBtn = projectItemElement.querySelector('button:last-of-type');
    switchBtn = DOMHelper.clearEventListeners(switchBtn);
   
    switchBtn.textContent = type === 'active' ? 'Finish' : 'activate';
    switchBtn.addEventListener(
      'click',this.updateProjectListsHandler.bind(null,this.id)
    );
  }

iCMS 回答:将函数的逻辑应用于最初不在HTML脚本中的新创建的HTML

您需要创建一个click事件处理程序,该事件处理程序将调用moveElement。您还需要注意ID,以避免重复:

  createNew () {
    const newItem = document.getElementById('active').querySelector('li');
    const cln = newItem.cloneNode(true);
    cln.id = "p" + (document.querySelectorAll("#active > li").length + 1);
    document.getElementById('active').appendChild(cln);
    cln.addEventListener("click",function() {DOMHelper.moveElement(cln.id,"#finished-projects ul")});
  }

在这里测试:https://jsfiddle.net/gcL6e3kz/

观察:这与您所询问的问题无关,但是如果我在所有卡上单击“完成”,然后单击“添加新”,则它将失败,因为没有要克隆的内容。为此,最好通过模板文字创建一些模板,然后可以使用它们而不必假设至少有一张卡片。编码愉快!

本文链接:https://www.f2er.com/1521200.html

大家都在问