[英]How to embed DOM element inside template literals
有什么办法可以将DOM元素嵌入模板字符串中?
const btn= document.createElement('button');
btn.addEventListener('click', handler);
someDiv.innerHTML = `
<div>${btn}</div>
`;
它只是调用HTMLElement的toString函数并呈现[object HTMLButtonElement]
而不是实际的按钮
您可以使用Element.outerHTML
将元素作为字符串获取。 请注意,它不会将真实的btn
附加到div
它会复制元素的html, eventListener
附加到它的eventListener
无效。
如果您希望复制元素具有其功能,则可以使用cloneNode()
和appendChild()
将其插入父级。
let somediv = document.querySelector('#somediv'); const btn= document.createElement('button'); btn.innerHTML = 'Click me'; btn.addEventListener('click',(e) => { somediv.innerHTML = `<div>${btn.outerHTML}</div>` console.log(somediv.innerHTML); }) document.body.appendChild(btn);
#somediv{ position:absolute; top:200px; left:200px; padding:10px; background:blue; }
<div id="somediv"></div>
不,元素本身不能以这种方式插入。 您可以将其序列化为HTML,但是会丢失对元素所做的所有更新,例如事件处理程序。
相反,您可以使用HTML创建整个结构,然后选择button
以添加侦听器。
someDiv.innerHTML = ` <div><button>click me</button></div> `; someDiv.querySelector("button") .addEventListener('click', handler); var pre = document.querySelector("pre"); function handler(e) { pre.textContent += "foo "; }
<div id=someDiv> </div> <pre></pre>
元素属性
innerHTML
获取或设置元素中包含的HTML或XML标记。
您不能使用innerHTML插入使用createElement
创建的DOM节点,因为您必须使用ParentNode.append()
类的方法:
const btn= document.createElement('button'); btn.textContent = 'click'; btn.addEventListener('click', handler); someDiv.innerHTML = ` <div class="inner"></div> `; document.querySelector('.inner').append(btn); function handler(){alert('clicked')}
<div id="someDiv"></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.