如何使用jQuery替换整个HTML节点

时间:2009-08-06 00:03:36

标签: javascript jquery

我有一个看起来像的字符串:

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

我将此字符串作为结果返回给AJAX请求。

我希望浏览器呈现并显示该字符串。我的想法是做类似的事情:

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

嗯,这不起作用。我试图使用IFRAME,但我还没弄明白如何让它工作。

注意:我无法更改此字符串。我也不可能在随后的服务器调用中重新生成此字符串(否则我只能将浏览器重定向到该URL)。

5 个答案:

答案 0 :(得分:120)

document.open/write/close方法可以满足您的需求:

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

除非您传入replace参数,否则document.open调用会添加页面历史记录。因此,用户必须再次单击两次才能转到上一页。

答案 1 :(得分:14)

您可以删除html标记,然后将所有内容放在html元素中:

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

答案 2 :(得分:6)

至少在firefox(47.0)解决方案中:

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

无法正常工作,因为按下firefox上的后退按钮仍然会加载以前的历史记录条目 - 即使用“替换”的整个点是为了避免用户单击其后退按钮仅受到页面视图的欢迎在最后一次调用document.write()之前。这样做不会导致上述影响的方法就是直接调用文档对象上的方法:

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

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

答案 3 :(得分:3)

尝试的另一种变体可能是

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

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

答案 4 :(得分:1)

document.documentElement.innerHTML = myString;

除了IE9之外,它都可以工作。

相关问题