设置 html 后添加事件的正确方法
Proper way to add an event after setting html
假设我有一个元素,我想写 html,例如:
const tr = ...;
tr.innerHTML = `<td>...</td>`;
有没有办法编写 html 以便我已经有一个事件侦听器,或者我是否需要使用新的选择器并向其添加事件侦听器,例如:
tr.querySelector('td').addEventListeneer('click', myFunction);
或者这通常是如何完成的?
您可以编写一个将模板字符串作为输入的函数:
const dom = innerString => {
const holder = document.createElement("DIV");
holder.innerHTML = innerString;
return holder.children;
};
然后用
调用它
const elements = dom("<tr><td>…</td></tr>");
现在您可以使用
将事件侦听器附加到第一个元素
elements[0].children[0].addEventListener(…);
然后将元素数组附加到文档
您可以按照您的建议进行操作,方法是插入 HTML 然后添加一个事件侦听器。
或者,您可以使用 createElement 文档方法在 DOM 之外创建元素,附加您的事件侦听器和任何其他属性,然后将其作为一个整体插入。
第二种方式在性能和安全方面都有好处,但这在很大程度上取决于用例,所以如果这对您很重要,请随时进一步探索。
假设我有一个元素,我想写 html,例如:
const tr = ...;
tr.innerHTML = `<td>...</td>`;
有没有办法编写 html 以便我已经有一个事件侦听器,或者我是否需要使用新的选择器并向其添加事件侦听器,例如:
tr.querySelector('td').addEventListeneer('click', myFunction);
或者这通常是如何完成的?
您可以编写一个将模板字符串作为输入的函数:
const dom = innerString => {
const holder = document.createElement("DIV");
holder.innerHTML = innerString;
return holder.children;
};
然后用
调用它const elements = dom("<tr><td>…</td></tr>");
现在您可以使用
将事件侦听器附加到第一个元素elements[0].children[0].addEventListener(…);
然后将元素数组附加到文档
您可以按照您的建议进行操作,方法是插入 HTML 然后添加一个事件侦听器。
或者,您可以使用 createElement 文档方法在 DOM 之外创建元素,附加您的事件侦听器和任何其他属性,然后将其作为一个整体插入。
第二种方式在性能和安全方面都有好处,但这在很大程度上取决于用例,所以如果这对您很重要,请随时进一步探索。