jQuery:如何使用.load将另一个HTML替换为整个DOM

时间:2014-01-30 17:18:29

标签: javascript jquery html dom

我有问题。 我们正在做一个强制性门户网站。

转到任何网站,例如www.php.net 然后在Chrome的控制台中,使用:

$("html").load( "https://www.ccc.co.il/Suspend.aspx" );

您会注意到,DOM已被替换,但不是应该如此: 加载的网页(例如标题,正文)的包装元素丢失了!

这会在注入的页面上引起问题。

如何替换整个初始DOM? 请不要使用链接或正常重定向向我建议。 这些是限制,我需要替换整个DOM树。

谢谢!

3 个答案:

答案 0 :(得分:2)

这基本上是浏览器的一项功能。

以下是来自.load()的jQuery文档的剪辑:

  

jQuery使用浏览器的.innerHTML属性来解析检索到的文档并将其插入到当前文档中。在此过程中,浏览器通常会过滤文档中的元素,例如<html><title><head>元素。因此,.load()检索的元素可能与浏览器直接检索文档的内容不完全相同。

虽然我不建议您提出建议,但我会尝试回答您的问题:

使用服务器端语言(例如PHP),将文档作为已解析的json:

返回
{
    "head": [head string],
    "body": [body string]
}

然后您的JavaScript可以单独替换每个元素。 您需要从.load()切换到更可配置的内容,例如.ajax()

答案 1 :(得分:0)

我认为在这种情况下你必须使用iframe,因为我认为你不能用另一个替换整个DOM。

$('body').html("<iframe height=100% width=100% frameBorder=0 src='https://www.ccc.co.il/Suspend.aspx'></iframe>");

http://jsfiddle.net/c7EbY/

答案 2 :(得分:0)

$.get("https://www.ccc.co.il/Suspend.aspx", function(html){$("html").html(html)});

我在这里使用常规的AJAX函数,因为它不应该剥离任何东西。

对于连续4个html抱歉。 :P