我正在尝试通过包含<tr>
元素的HTML解析器运行HTML字符串。使用普通的HTML解析器,<tr>
元素将消失,因为您无法在<table>
元素之外创建它们。所以我尝试使用<template>
元素并使用innerHTML
,因为模板标签没有相同的限制,可以很好地创建<tr>
元素。这非常有效,我能够很好地创建元素。
var html = '<tr><td>foo</td></tr><tr><td>bar</td></tr>';
var template = document.createElement('template');
template.innerHTML = html;
document.body.appendChild(template.content);
但是,稍后我尝试使用<script>
标记而不是表行执行相同的操作,但是当模板添加到正文时,脚本标记不会运行。
var html = '<script>alert("hello");</script>';
var template = document.createElement('template');
template.innerHTML = html;
document.body.appendChild(template.content); // doesn't execute the script
但是,如果我能够创建一个脚本标记并将其附加到模板,那么它将起作用。
var template = document.createElement('template');
var script = document.createElement('script');
script.textContent = 'alert("hello");';
template.content.appendChild(script);
document.body.appendChild(template.content); // does execute the script
有谁知道为什么使用innerHTML
打破模板的脚本标签(样式标签也可以使用此方法正常工作)?