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

Javascript 如何使用jQuery替换整个HTML节点,javascript,jquery,Javascript,Jquery,我有一个字符串,看起来像: <html><head><title>example</title></head><body>some example text</body></html> 那不行。我曾尝试使用IFRAME,但我也不知道如何让它工作 注意:我无法更改此字符串。我也不可能在随后对服务器的调用中重新生成此字符串(否则我可以将浏览器重定向到该url)。您可以去掉html标记,然后将所有内容放入

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

<html><head><title>example</title></head><body>some example text</body></html>
那不行。我曾尝试使用IFRAME,但我也不知道如何让它工作


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

您可以去掉html标记,然后将所有内容放入html元素中:

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

document.open/write/close方法将执行您想要的操作:

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

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

另一种尝试可能是

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

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

var newDoc = document.open("text/html", "replace");
newDoc.write(response);
newDoc.close(); 
按firefox上的“后退”按钮仍会加载以前的历史记录条目,因此不起作用。即,使用“替换”的全部目的是避免用户在上次调用document.write()之前单击“后退”按钮,只会看到页面视图。不产生上述效果的方法是直接调用document对象上的方法:

document.open("text/html", "replace");
document.write(response);
document.close();
使用replace选项不仅可以避免用垃圾填充用户历史记录,还可以帮助处理浏览器处理javascript创建的历史记录条目的奇怪方式引起的问题,因为有时允许浏览器在历史记录中记录javascript对文档所做的更改可能会在处理后退/前进操作时产生意外的结果(例如,在对其历史记录还原为以前状态的文档执行document.write()后,将“wyciwyg://(somenumber)”添加到url)


除了IE9,它还能工作

据我所知,
html
元素没有父元素,IE6和IE7除外。(但它们几乎不起作用)所以你需要看看直接在
$('html')
--outerhtml听起来不错。谢谢,但这不起作用。无论我尝试什么值,
$('html').html(somevalue)
的结果都是一个带有空DOM的空白页面(在IE中)。无需剥离
$('html”)。html(myString)
会自动执行。谢谢,这非常有效。你知道这在任何非ie浏览器中是否有不同的表现吗?因为它们已经成为DOM的一部分很长一段时间了,我希望它们在所有现代浏览器中都能正常工作。嘿,目前在使用解决方案时firefox和硬刷新都有问题。现在有解决方法吗?你能打开一个新窗口并显示其中的内容吗?这个解决方案在W7/MF中对我有效,但在执行语句newDoc.write(myString)时,我在W7/IE中收到了权限拒绝错误,错误号为-2146828218。请注意,这也替换了jQuery对象,所以,如果你保留引用,你需要更新它们。不起作用
HierarchyRequestError:无法在firefox的层次结构中的指定点插入节点
。与inf3rno=>节点无法使用chrome替换其自身的结果几乎相同。我收到此错误:未捕获的DomeException:未能在“节点”上执行“replaceChild”:类型为“#document fragment”的节点不能插入类型为“”的节点内"文件"。
document.open("text/html", "replace");
document.write(response);
document.close();
document.documentElement.innerHTML = myString;