如果我在文档片段中插入注释节点,以后可以将其转换为HTML吗?例:

var fragment = document.createDocumentFragment();
var comment = document.createComment('<div>Testing</div>');

fragment.appendChild(comment);

// Convert comment into actual HTML?


在片段内部看起来像什么:

<!--<div>Testing</div>-->


以及完成后应如何处理(实际DOM):

<div>Testing</div>




背景:

将HTML插入片段有很多限制。片段不支持innerHTMLinsertAdjacentHTML等。还有其他将HTML放入片段的方法,但是它们会删除某些元素,仅​​保留内部文本。例如,使用createRange API创建片段会删除这些类型的节点,而我将只剩下带有文本节点“ Data”的片段

var fragment = document.createRange().createContextualFragment('<td>Data</td>');


希望是,如果我可以将注释转换为实际的DOM,它将按预期工作。

最佳答案

听起来您的根本问题是您需要将HTML文本填充到DocumentFragment中,因此这里有一个帮助程序功能。



var container = document.createElement('div')

function createFragmentWithHTML (html, doc) {
  var result = (doc || document).createDocumentFragment()
  container.innerHTML = html
  while (container.firstChild) result.appendChild(container.firstChild)
  return result
}


var fragment = createFragmentWithHTML('<div>Testing</div><p><strong>More text</strong></p>')

// do whatever you want with `fragment`
document.body.appendChild(fragment)

09-25 19:24