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

nwsw7zdq  于 2023-01-04  发布在  Java
关注(0)|答案(8)|浏览(163)

我很肯定这是一个常见的问题,但我是相当新的JS和有一些麻烦。
我想不使用iframes就把x.html加载到一个id为“y”的div中,我试了很多方法,到处搜索,但是我找不到一个合适的解决方案。
如果可能的话,我更喜欢JavaScript中的东西。

jmp7cifd

jmp7cifd1#

哇,从所有关于框架推广的回答中,你可能会认为这是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();

如果您需要IE〈8兼容性,请先执行以下操作以使这些浏览器达到最高速度:

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

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

w8f9ii69

w8f9ii692#

jQuery .load()方法:

$("#y").load("x.html");
kpbwa7wx

kpbwa7wx3#

使用提取

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

<div id='elementID'> </div>

获取需要接收http或https链接,这意味着它不能在本地工作。

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

jpfvwuh4

jpfvwuh44#

2021年

thiagola 92的答案有两个可能的变化。
1.异步等待-如果首选
1.内部文本上的insertAdjacentHTML(更快)

<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>
woobm2wo

woobm2wo5#

我建议使用现有的JS库。它们可以确保兼容性,因此您可以快速启动和运行。jQuery和DOJO都非常棒。例如,要想在jQuery中完成您要做的事情,应该是这样的:

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

xfyts7mz6#

document.getElementById("id").innerHTML='<object type="text/html" data="x.html"></object>';
6ie5vjzr

6ie5vjzr7#

过去有一种方法可以实现这一点,但它被从规范中删除,随后也从浏览器中删除(例如Chrome在Chrome 70中删除了它)。它被称为HTML imports,最初是Web组件规范的一部分。
目前,人们正在开发一个替代品来取代这个明显缺乏平台的特性,这个特性将被称为HTML modules。这里是the explainer,这里是这个特性的Chrome platform status。目前还没有指定这个特性何时登陆的里程碑。
语法很可能类似于以下内容:

import { content } from "file.html";

解决HTML模块的剩余问题我认为可能需要相当长的时间,因此在此之前,您唯一可行的选择是

我们已经有了JSON modulesCSS module scripts(这两个功能也严重缺失了很长时间)。

ahy6op9u

ahy6op9u8#

http://www.boutell.com/newfaq/creating/include.html
这将解释如何编写您自己的客户端inlcude,但jQuery是一个非常非常容易的选择...另外,无论如何,您将通过使用jQuery获得更多

相关问题