开发者问题收集

获取div的id,通过模板字面量设置为数字

2019-07-18
125

尝试 document.getElementById() 时遇到一个小问题,其中 ID 设置为数字。

您可以在下面看到,我循环遍历数据库中的对象并显示 DOM 中的每个元素。然后我为每个 div 赋予一个 id(即数字 lastTask.id ):

  function displayLastTask(lastTask) {
    console.log(lastTask);
    individualTasks +=
      `<div class="todoStyle">
        <p>Date: ${lastTask.date}: Task: ${lastTask.todo}</p>
        <p><button class="deleteButton" id=${lastTask.id}>Delete</button>
      </div>`;
    tasksContainer.innerHTML = individualTasks;
    return tasksContainer;
  }

我这样做是因为稍后我想通过其 ID/对象数组编号获取删除按钮。(并且仅删除数据库中 ID 匹配的对象)。

无论如何,我的问题是,如果 document.getElementById() 是一个数字,我该如何执行它? toString 不起作用。如果 ID 是数字,不确定这是否有可能...

这是我正在尝试的:

    for (var i = 0, len = res.length; i < len; i++) {
      lookup[res[i].id] = res[i];

      const id = toString(res[i].id);

      document.getElementById(id).addEventListener('click', function(event){
        event.preventDefault();
        console.log('clicked');
      });
    }

返回以下错误:

Uncaught (in promise) TypeError: Cannot read property 'addEventListener' of null

尝试了几种变化,但没有成功。

2个回答

您不应该为每个项目添加事件侦听器。 您可以使用事件冒泡来实现这一点。

只需向您的元素的父节点添加事件侦听器即可。 例如

document.querySelector('#parent').addEventListener('click', event => { 
    console.log(event.target.parentNode.id); 
})

如果出于某种原因您必须选择该元素的父元素而不是直接父元素,因为您不止一次创建项目的父元素,则只需记录以下内容: console.log(event.target.parentNode.parentNode.id);

如果它甚至更高,您只需继续添加父节点。

只需尝试这些设置,直到找到您要查找的内容。

希望我的解释可以理解。

Keimeno
2019-07-18

您需要用“”包裹 id

  function displayLastTask(lastTask) {
    console.log(lastTask);
    individualTasks +=
      `<div class="todoStyle">
        <p>Date: ${lastTask.date}: Task: ${lastTask.todo}</p>
        <p><button class="deleteButton" id="${lastTask.id}">Delete</button>
      </div>`;
    tasksContainer.innerHTML = individualTasks;
    return tasksContainer;
  }
Constantin Trepadus
2019-07-18