我如何使用jQueryreplace整个HTML节点

我有一个string,看起来像:

<html><head><title>example</title></head><body>some example text</body></html> 

我将这个string作为结果返回给AJAX请求。

我希望浏览器呈现并显示该string。 这个想法是做一些事情:

 $('html').parent().html(myString); 

那么,这是行不通的。 我试图使用一个IFRAME,但我还没有想出如何得到这个工作。

注意:我不可能改变这个string。 在随后的服务器调用中重新生成这个string也是不可能的(否则我可以将浏览器redirect到那个url)。

document.open/write/close方法将做你想要的:

 var newDoc = document.open("text/html", "replace"); newDoc.write(myString); newDoc.close(); 

除非传入replace参数,否则document.open调用会添加页面历史logging。 所以用户将不得不点击两次去上一页。

你可以去掉html标签,然后把所有内容放在html元素中:

 $('html').html(myString.replace(/<html>(.*)<\/html>/, "$1")); 

至less在firefox(47.0)解决scheme:

 var newDoc = document.open("text/html", "replace"); newDoc.write(response); newDoc.close(); 

不能按照build议工作,因为按下Firefox上的后退button仍然加载以前的历史logging – 即使用“replace”的整个点是为了避免用户点击后退button,只有在最后的页面视图时间document.write()被调用。 不会导致上述效果的方法是直接调用文档对象上的方法:

 document.open("text/html", "replace"); document.write(response); document.close(); 

使用replace选项不仅可以避免用垃圾填充用户历史logging,而且还有助于处理浏览器经常处理由javascript创build的历史logging的奇怪方式所引起的问题,有时允许浏览器logging所做的更改在历史logging中通过javascript处理文档可能会在处理后退/前进操作时产生意想不到的结果(例如,在对历史logging进行恢复的文档上执行document.write()后,将“wyciwyg://(somenumber)”添加到url到之前的状态)。

另一种尝试可能是

 $('html').replaceWith(myString); 

http://api.jquery.com/replaceWith/