如果尽管有其他答案,您仍坚持从 JavaScript 执行此操作,则以下是我使用的模块:
(function xload (slctr) { //================================================== xload ===
function xloader (src, dst) {
if (arguments.length == 1) {
dst = src;
src = dst.getAttribute ('data-source') || '';
}
var req;
try {
src = src.match (/^([^]*?)(!)?(?:\[\[([^]*?)\]\])?$/);
(req = new XMLHttpRequest ()).open ('GET', src[1], !src[2]);
req.onreadystatechange = function (ev) {
if (this.readyState === 4) {
if (typeof dst == 'function')
dst (req);
else {
dst[dst.tagName == 'TEXTAREA' ? 'value' : 'innerHTML'] = this.responseText;
[].forEach.call (dst.getElementsByTagName ('SCRIPT'), function (s, i) {
var script = document.createElement ('script');
script.innerHTML = s.parentNode.removeChild (s).innerHTML;
document.body.appendChild (script);
})
}
}
};
src[3] && req.overrideMimeType &&
req.overrideMimeType (src[3]);
req.send (null);
} catch (err) { console.log ('xloader error : ', err); }
}
[].forEach.call (document.querySelectorAll (slctr), function (el) { xloader (el); });
}) ('[data-source]'); //------------------------------------------------------ xload ---
处理任何元素,div
例如具有data-source
属性的元素。data-source
指定要包含的文件的 url 。当他的 Ajax 请求完成时,所有内容div
都将替换为获取的文本。该data-sourc
url 可以选择后跟一个!
指示同步加载,然后是一个 Mime 类型,包含在[[
和]]
加载文本中的任何脚本都被提取并注入到文档正文中。
在控制台上报告错误情况。
该模块是完全独立的,并处理包含该data-source
属性的所有元素。它当然应该在页面的 HTML 文本之后加载。