我如何使用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到之前的状态)。