2013-03-18 54 views
5

我想要实现的是使用jquery通过传递一个大的html字符串来操纵使用DOM创建的文档。请考虑以下示例:jQuery能否操纵使用DOM创建的临时文档?

var doctype = document.implementation.createDocumentType('html', '', ''); 
var dom = document.implementation.createDocument('', 'html', doctype); 
dom.documentElement.innerHTML = '<head><head><title>A title</title></head><body><div id="test">This is another div</div></body>'; 

这将在提供的内容中创建一个dom中的新文档。现在我想用jQuery来追加让我们说现有的div内的div。

$('#test',dom).append('<div> A second div</div>'); 
console.log(dom); 

当我打印出结果在控制台看来,“DOM”的innerHTML并没有改变。从jquery的API文档,http://api.jquery.com/jQuery/更具体的“jQuery(selector [,context])”函数应该允许这样做。

,因为有人可能争辩使用控制台调试,我提供下面的代码另一部分不工作:

$('body').append($('#test',dom)); 

测试在Chrome和Firefox,它不与最新的jQuery库工作。

回答

3

通过设置时改变构造和使用下面

var dom = document.implementation.createHTMLDocument("Test"); 

,而不是最初引入

var doctype = document.implementation.createDocumentType('html', '', ''); 
var dom = document.implementation.createDocument('', 'html', doctype); 

一切正常,两条线的线,甚至直接使用innerHTML!

2

看起来它是通过innerHTML设置的整个HTML内容不起作用。

从你的代码尝试,你会发现下面没有产生任何结果之一:

dom.documentElement.getElementsByTagName('body') 

dom.bodynull。但是,如果你想构建的对象,而不是刚才设置的innerHTML,上述两种的jQuery选择将工作:

dom.body = document.createElement('body'); 
dom.body.appendChild(document.createElement('div')); 

console.log($('div', dom)); 
+0

感谢您的建议,但从我的情况来看,使用整个字符串创建文档非常重要。单独创建每个元素非常耗时,尤其是在这是获得响应的情况下。另外,我很好奇的是为什么设置innerHTML不起作用? – zabetak 2013-03-18 17:26:08