将HTML文件内容加载到Div [不使用iframe]

Map*_*Web 48 html javascript

我很确定这是一个常见的问题,但我对JS很新,我遇到了一些麻烦.

我想在不使用iframe的情况下将x.html加载到ID为"y"的div中.我尝试了一些东西,搜索过,但我找不到合适的解决方案.

如果可能的话,我更喜欢JavaScript.

大家提前感谢!

bob*_*nce 86

哇,从所有框架促销答案中你都会认为这是JavaScript难以置信的难题.这不是真的.

var xhr= new XMLHttpRequest();
xhr.open('GET', 'x.html', true);
xhr.onreadystatechange= function() {
    if (this.readyState!==4) return;
    if (this.status!==200) return; // or whatever error handling you want
    document.getElementById('y').innerHTML= this.responseText;
};
xhr.send();
Run Code Online (Sandbox Code Playgroud)

如果您需要IE <8兼容性,请首先执行此操作以使这些浏览器更快:

if (!window.XMLHttpRequest && 'ActiveXObject' in window) {
    window.XMLHttpRequest= function() {
        return new ActiveXObject('MSXML2.XMLHttp');
    };
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用脚本将内容加载到页面中将使该内容对于没有JavaScript可用的客户端(例如搜索引擎)不可见.小心使用,如果您想要的只是将数据放在公共共享文件中,请考虑服务器端包含.

  • 这是一个很好的答案,因为问题不是关于JQuery.在某些情况下,您*不能*使用JQuery或某些框架来执行此操作. (15认同)
  • 今天的浏览器不会让你XHR进入文件系统.您需要设置测试Web服务器. (4认同)
  • @Costa:听起来你正在尝试跨站点XMLHttpRequest.出于安全原因,这是不允许的,除非目标站点选择加入. (3认同)

Dej*_*vic 69

jQuery的:

$("#y").load("x.html");
Run Code Online (Sandbox Code Playgroud)

  • jQuery很棒,可以做所有事情. (14认同)
  • @EdgarsŠturms它可能有用,而且简洁,但它不是正确的答案,因为这个问题没有要求jQuery解决方案. (8认同)
  • 为什么这个答案没有标记为已回答,对我来说它就像一个魅力!令人惊讶的是,只需要jquery来制作动态主页. (2认同)

Mar*_*ser 10

2021年

thiagola92 的答案有两个可能的改变。

  1. 异步等待 - 如果愿意

  2. 在innerText上插入AdjacentHTML(更快)

    <script>
    async function loadHtml() {
         const response = await fetch("page.html")
         const text = await response.text()
         document.getElementById('elementID').insertAdjacentText('beforeend', text)
    }
    
    loadHtml()
    </script>
    <!-- ... -->
    <div id='elementID'> </div>
    
    Run Code Online (Sandbox Code Playgroud)


thi*_*a92 8

2019
使用提取

<script>
fetch('page.html')
  .then(data => data.text())
  .then(html => document.getElementById('elementID').innerHTML = html);
</script>

<div id='elementID'> </div>
Run Code Online (Sandbox Code Playgroud)

fetch需要接收一个http或https链接,这意味着它将无法在本地使用。

注意:正如Altimus Prime所说,它是现代浏览器的功能

  • +1 对于现代浏览器来说是一个很好的答案,但要注意:经过几个小时的测试,我无法在 Cordova 9.0.0 中完成这项工作,不得不求助于老式的“XMLHttpRequest”,它工作得很好。我认为 Cordova 还不支持“fetch”。 (2认同)

小智 6

    document.getElementById("id").innerHTML='<object type="text/html" data="x.html"></object>';
Run Code Online (Sandbox Code Playgroud)


Kea*_*her 5

我建议进入其中一个JS库.它们可确保兼容性,因此您可以非常快速地启动和运行.jQuery和DOJO都很棒.例如,要做你在jQuery中尝试做的事情,它会是这样的:

<script type="text/javascript" language="JavaScript">
$.ajax({
    url: "x.html", 
    context: document.body,
    success: function(response) {
        $("#yourDiv").html(response);
    }
});
</script>
Run Code Online (Sandbox Code Playgroud)