我想在 JavaScript 中创建一个完全封装的子文档,它有自己的<head>
、<body>
、 样式、 html 和 js。基本上是一个影子 dom 或 iframe,但没有 src 属性。
虽然我喜欢 shadow dom 的想法,但它的支持率很低,因此还没有准备好迎接黄金时段。
所以我一直在努力创建一个 iframe,但在此过程中遇到了各种障碍。这是一个 jsFiddle,展示了我的各种尝试。
iframe 不能存在于 dom 中。这部分很关键。澄清一下,如果它暂时存在于dom中是可以的,但它必须能够被提取并只存在于JS中。
$('body').append('<iframe id="iframeGenerator" />');
var iframe3 = $('#iframeGenerator');
var iframe3Contents = iframe3.contents();
$('#iframeGenerator').remove();
var head = iframe3.contents().find('head');
亲爱的,我们有头了
console.log(head.length);
但内容是什么样的?
console.log(iframe3Contents.get(0));
它是一个文档,但不在元素内部,所以让我们尝试将它放在 dom 或另一个元素内部? 以下两种尝试都不起作用,因为选择器没有上下文或其他东西......
$('body').append(iframe3Contents);
var generatedIframe = $('<iframe />').append(iframe3Contents);
我希望能够在不向 dom 附加任何内容的情况下创建 iframe / subdocuemnt ...但如果必须的话,我仍然希望能够随后将其从 dom 中删除并在 js 中进一步管理它。
我有这个不起作用的小功能,但说明了我想要创建的 iframe 或子文档生成器的类型
var iframeHtml;
giveMeIframe = function() {
var iframeContents;
if (iframeHtml) {
return iframeHtml;
} else {
$('body').append('<iframe id="iframeGenerator" style="display: none" />');
iframeContents = $('#iframeGenerator').contents();
iframeHtml = $('<iframe />');
iframeHtml.append(iframeContents);
$('#iframeGenerator').remove();
return iframeHtml;
}
}