我想在点击按钮时将一些Jade内容加载到某个div中。我已经找到了如何用jquery做这个,有几个帖子,基本上我想做的是
$('#div').load('/somePage');
但是,我无法在我的项目中使用jQuery。在vanilla javascript中是否有相同的功能?
答案 0 :(得分:10)
我认为您可以使用以下内容执行此操作;
var request = new XMLHttpRequest();
request.open('GET', '/somepage', true);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
var resp = request.responseText;
document.querySelector('#div').innerHTML = resp;
}
};
request.send();
顺便说一句,您也可以使用fetch API来完成此操作。
fetch('/somepage')
.then(function(response) {
return response.text();
})
.then(function(body) {
document.querySelector('#div').innerHTML = body;
});
顺便说一句,您可以阅读this blog post了解有关fetch API的信息。
答案 1 :(得分:2)
当我尝试解决同样的问题时,我做了一个基于Ali BARIN's answer的问题,看起来工作得很好,但是版本更加明确,添加了init
信息,并且有一些使用document.getElementById
代替querySelector
的逻辑。
/*
* Replicates the functionality of jQuery's `load` function,
* used to load some HTML from another file into the current one.
*
* Based on this Stack Overflow answer:
* https://stackoverflow.com/a/38132775/3626537
* And `fetch` documentation:
* https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
*
* @param {string} parentElementId - The ID of the DOM element to load into
* @param {string} htmlFilePath - The path of the HTML file to load
*/
const loadHtml = function(parentElementId, filePath) {
const init = {
method : "GET",
headers : { "Content-Type" : "text/html" },
mode : "cors",
cache : "default"
};
const req = new Request(filePath, init);
fetch(req)
.then(function(response) {
return response.text();
})
.then(function(body) {
// Replace `#` char in case the function gets called `querySelector` or jQuery style
if (parentElementId.startsWith("#")) {
parentElementId.replace("#", "");
}
document.getElementById(parentElementId).innerHTML = body;
});
};