HTML导入其他页面(代码块)小工具

在写electron项目的时候需要把一个HTML页面根据功能拆分成好几块,用的哪个页面就导入哪个页面,由于官网上没找到这方面的技术文档,所以想了一个办法,通过一个自定义标签把对应的代码块插入当前页面,实现无缝拼接。

目前有两个缺点:

1.为了解决加载顺序的问题,用了jquery的$(function(){}),所以在使用这个小工具的时候需要先引入jquery。(其实也算不上缺点,现在写HTML页面基本都会用到jquery,哈哈哈哈,手动狗头)

2、通过点击按钮触发事件的时候,如果是通过选择器触发,比如$("#xxx").click()时没有反应,估计也是加载顺序的问题,暂时未解决,补救办法是在标签里通过οnclick="xxx()"调用(有大佬知道怎么解决,别忘了通知一声,我也学习学习)。

使用方法:创建js文件,复制粘贴下方的代码,然后在需要导入的地方使用<include src="xxx.html"></include>即可。

使用的js文件代码:

(function (window, document, undefined) {

    var Include39485748323 = function () { }

    Include39485748323.prototype = {

        //倒序循环

        forEach: function (array, callback) {

            var size = array.length;

            for (var i = size - 1; i >= 0; i--) {

                callback.apply(array[i], [i]);

            }

        },

        getFilePath: function () {

            var curWwwPath = window.document.location.href;

            var pathName = window.document.location.pathname;

            var localhostPaht = curWwwPath.substring(0, curWwwPath.indexOf(pathName));

            var projectName = pathName.substring(0, pathName.substr(1).lastIndexOf('/') + 1);

            return localhostPaht + projectName;

        },

        //获取文件内容

        getFileContent: function (url) {

            var ie = navigator.userAgent.indexOf('MSIE') > 0;

            var o = ie ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();

            o.open('get', url, false);

            o.send(null);

            return o.responseText;

        },

        parseNode: function (content) {

            var objE = document.createElement("div");

            objE.innerHTML = content;

            return objE.childNodes;

        },

        executeScript: function (content) {

            var mac = /<script>([\s\S]*?)<\/script>/g;

            var r = "";

            while (r = mac.exec(content)) {

                eval(r[1]);

            }

        },

        getHtml: function (content) {

            var mac = /<script>([\s\S]*?)<\/script>/g;

            content.replace(mac, "");

            return content;

        },

        getPrevCount: function (src) {

            var mac = /\.\.\//g;

            var count = 0;

            while (mac.exec(src)) {

                count++;

            }

            return count;

        },

        getRequestUrl: function (filePath, src) {

            if (/http:\/\//g.test(src)) { return src; }

            var prevCount = this.getPrevCount(src);

            while (prevCount--) {

                filePath = filePath.substring(0, filePath.substr(1).lastIndexOf('/') + 1);

            }

            return filePath + "/" + src.replace(/\.\.\//g, "");

        },

        replaceIncludeElements: function () {

            var $this = this;

            var filePath = $this.getFilePath();

            var includeTals = document.getElementsByTagName("include");

            this.forEach(includeTals, function () {

                //拿到路径  

                var src = this.getAttribute("src");

                //拿到文件内容  

                var content = $this.getFileContent($this.getRequestUrl(filePath, src));

                //将文本转换成节点  

                var parent = this.parentNode;

                var includeNodes = $this.parseNode($this.getHtml(content));

                var size = includeNodes.length;

                for (var i = 0; i < size; i++) {

                    parent.insertBefore(includeNodes[0], this);

                }

                //执行文本中的额javascript  

                $this.executeScript(content);

                parent.removeChild(this);

                //替换元素 this.parentNode.replaceChild(includeNodes[1], this);  

            })

        }

    }

    $(function () {

        new Include39485748323().replaceIncludeElements();

    })

})(window, document)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值