首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用jQuery替换整个HTML节点

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

Stack Overflow用户
提问于 2009-08-06 00:03:36
回答 5查看 60.3K关注 0票数 64

我有一个字符串,如下所示:

代码语言:javascript
复制
<html><head><title>example</title></head><body>some example text</body></html>

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

我希望浏览器呈现并显示该字符串。我们的想法是这样做:

代码语言:javascript
复制
$('html').parent().html(myString);

那是行不通的。我曾尝试使用IFRAME,但我也没有想出如何让它工作。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-06 00:12:11

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

代码语言:javascript
复制
var newDoc = document.open("text/html", "replace");
newDoc.write(myString);
newDoc.close();

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

票数 137
EN

Stack Overflow用户

发布于 2009-08-06 00:08:38

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

代码语言:javascript
复制
$('html').html(myString.replace(/<html>(.*)<\/html>/, "$1"));
票数 16
EN

Stack Overflow用户

发布于 2016-07-01 20:21:55

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

代码语言:javascript
复制
var newDoc = document.open("text/html", "replace");
newDoc.write(response);
newDoc.close(); 

没有按照建议的那样工作,因为按下火狐上的后退按钮仍然加载以前的历史记录条目-即使用“替换”的整个要点是为了避免用户单击他们的后退按钮只是在最后一次调用document.write()之前页面视图的问候。执行此操作的方法是直接调用document对象上的方法,而不会产生上述影响:

代码语言:javascript
复制
document.open("text/html", "replace");
document.write(response);
document.close();

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1236360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档