我正在尝试使用香草JS来加载内容而无需刷新。单击菜单选项时,我想从另一个html文件中获取内容,但只能获取正文或特定类。
在没有jQuery的情况下可以做到吗?
谢谢!
var AJAX = function(page){
var call = new XMLHttpRequest();
call.open("GET", page);
call.send();
call.addEventListener("load", function(e){
console.log(e.target.responseText); // this shows all the HTML as text, but I only want to grab either the body or a particular class, and use it in an innerHTML method.
});
}
答案 0 :(得分:0)
使用XMLHttpRequest
很简单-将responseType
设置为document
时,实例化的XMLHttpRequest
的{{1}}属性将包含响应文档,您可以在其上使用普通的DOM方法。例如,以下代码将从响应文档中选择并记录类名称为.response
的第一个元素的文本:
foo
如果使用更现代的function get(url){
var r = new XMLHttpRequest();
r.open('GET', url, true);
r.responseType = 'document';
r.onload = function () {
if (r.readyState !== 4 || r.status !== 200) return;
// also handle error statuses
// now, r.response is a document:
const doc = r.response;
console.log(doc.querySelector('.foo').textContent);
};
r.send();
}
方法,则可能必须使用fetch
将响应文本显式转换为文档。例如:
DOMParser
function get(url){
fetch(url)
.then(res => res.text())
.then((text) => {
const doc = new DOMParser().parseFromString(text, 'text/html')
console.log(doc.querySelector('.foo').textContent);
});
}
的优点之一是,您可以使用它将任何(有效)HTML字符串转换为文档。
答案 1 :(得分:0)
您可以:
对于1:
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4) {
var ajaxDisplay = document.getElementById('ajaxDiv');
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
对于2,这可能会有所帮助: https://stackoverflow.com/a/13460821/1364747