相当于没有jQuery的$ .load

时间:2016-06-30 20:18:34

标签: javascript jquery node.js express pug

我想在点击按钮时将一些Jade内容加载到某个div中。我已经找到了如何用jquery做这个,有几个帖子,基本上我想做的是

$('#div').load('/somePage');

但是,我无法在我的项目中使用jQuery。在vanilla javascript中是否有相同的功能?

2 个答案:

答案 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;

        });
};