javascript - 如何将 HTML 附加到 div,同时仍然允许监听器工作?

标签 javascript dom

我想将以下 HTML 附加到 div:

var map_div =
"<div class=\"maps\">"
  + "<h2>View marker <button class=\"close\" data-what=\"maps\">[ close ]</button></h2>"
  + "<div class=\"the-contents\" id=\"mapDiv" + link_id + "\"></div>"
+ "</div>";

我可以这样做:

document.getElementById("listing"+link_id).insertAdjacentHTML('beforeend', map_div );

这会正确地将 HTML 添加到 div 中 - 但这样做有一个问题,因为它似乎无法让监听器保持在 button.close 上。如果我将该 HTML 直接放入原始代码中(并且不要尝试将其注入(inject) DOM),则效果很好。我有什么遗漏的吗?我是否需要创建每个单独的元素,然后通过 appendChild 添加它,然后将另一个元素添加到该新元素中?好像有点啰嗦:/

谢谢

最佳答案

您可以向容器添加监听器并使用自定义属性来识别元素的 Angular 色和 ID:

document.querySelector("button").addEventListener(
  "click",
  e=>addItem(++startID)
)

var startID=0;
const container = document.getElementById("container");
const addItem = itemID => {
  const el = document.createElement("div");
  el.innerHTML = `
  <a href="#" data-role="say-hi" data-id="${itemID}">say hi</a>
  <a href="#" data-role="remove" data-id="${itemID}">remove</a>
  ${itemID}
  `;
  el.setAttribute("data-link-container-id",itemID);
  container.appendChild(el);
}

const handleClickable = e => {
  e.preventDefault();
  const id= e.target.getAttribute("data-id");
  console.log("hello:",id);
}
const handleRemove = e => {
  e.preventDefault();
  const id= e.target.getAttribute("data-id");
  container.querySelector(`[data-link-container-id="${id}"]`).remove();
}
//add event listener to container and use data-role to see what's clicked
container.addEventListener(
  "click",
  e=>{
    const role = e.target.getAttribute("data-role");
    if(role==="say-hi"){
      return handleClickable(e);
    }
    if(role==="remove"){
      return handleRemove(e);
    }
  }
)
<div id="container">
  <button>add</button>
</div>

关于javascript - 如何将 HTML 附加到 div,同时仍然允许监听器工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50059106/

相关文章:

javascript - 使用 jquery 在顶部元素之前添加一个新元素

javascript - 使用 stopPropagation 单击特定元素以外的任何地方

javascript - Azure Application Insights - 在 Javascript 中具有自定义属性的 trackEvent

javascript - 具有多个字段和 "display"属性的 CSS 选择器

javascript - 设置新元素类属性值

javascript - 使用原型(prototype)的基本树结构导航

javascript - 从 Node 确定Docker for Mac RAM限制

javascript - 如何找到元素思想父级?

javascript - 从元素背景中获取图像元素作为 DOM 资源

javascript - 计算器--时钟数字和文本框显示