zoukankan      html  css  js  c++  java
  • Javascript 自定义输出

    缘由

      前段时间再看了一些javascript的学习资料,也写的一些demo,在输出的时候一般都用alert,但这个方法会打断函数运行,用起来不是很好.还有就是console.log这个方法,这种方法原来一直以为只能在FireFox上面才能用,现在才发现主流浏览器都支持.但我的这个插件已经写的差不多了,所以我还是把它写出来,让大家共同学习一下.

    DOM结构

      由于只是对结果的简单输出,所以我选择了textarea存放.再给textarea加层div用于定位.同时加了4个控制按钮(最小化,最大化,清空,关闭).

    function createConsole() {
                //this:consoleClass的实例(这个也就是this用法的一个体现)
                var self = this;
    
                if (self.divConsoleContent != null && self.txtConsoleContent != null) {
                    if (self.divConsoleContent.style["display"] == "none") {
                        self.divConsoleContent.style["display"] = "block";
                        setStyle(self.divConsoleContent.style, options.maxSizeCss);
    
                    }
                    return;
                }
    
                var body = document.getElementsByTagName("body")[0];
                var div = document.createElement("div");
                div.setAttribute("id", "divConsoleContent");
                setStyle(div.style, options.maxSizeCss);
    
                var txt = document.createElement("textarea");
                txt.setAttribute("id", "txtConsoleContent");
                setStyle(txt.style, options.txtCss);
                txt.setAttribute("readonly", "readonly");
    
                var btnMax = document.createElement("button");
                var btnMin = document.createElement("button");
                var btnClear = document.createElement("button");
                var btnHidden = document.createElement("button");
                setStyle(btnMax.style, options.buttonCss);
                setStyle(btnMin.style, options.buttonCss);
                setStyle(btnClear.style, options.buttonCss);
                setStyle(btnHidden.style, options.buttonCss);
    
                btnMax.innerHTML = "u005bu005bu005du005d"; //[[]]
                btnMax.innerText = "u005bu005bu005du005d";
    
                btnMin.innerHTML = "u002d"; //-
                btnMin.innerText = "u002d";
    
                btnClear.innerHTML = "u007c"; //|
                btnClear.innerText = "u007c";
    
                btnHidden.innerHTML = "u00d7"; //x
                btnHidden.innerText = "u00d7";
    
                btnMin.onclick = function () {
                    setStyle(self.divConsoleContent.style, options.minSizeCss);
                };
                btnMax.onclick = function () {
                    setStyle(self.divConsoleContent.style, options.maxSizeCss);
                }
                btnClear.onclick = function () {
                    options.currentText = "";
                    self.txtConsoleContent.value = "";
                }
                btnHidden.onclick = function () {
                    //
                    setStyle(self.divConsoleContent.style, { display: "none" });
                }
    
                document.body.appendChild(div);
                div.appendChild(btnMin);
                div.appendChild(btnMax);
                div.appendChild(btnClear);
                div.appendChild(btnHidden);
                div.appendChild(txt);
                self.divConsoleContent = div;
                self.txtConsoleContent = txt;
    
            };

    数据处理

      数据处理是我只是简单的进行了字符串拼接,并没有对数据显示格式还转义字符进行处理,对于这些大家可以用JSON2进行处理,下面的例子用也有用到.

    //时间格式的处理借鉴了json2
            function f(n) {
                // Format integers to have at least two digits.
                return n < 10 ? '0' + n : n;
            }
            function formatDate(val) {
                return isFinite(val.valueOf())
                    ? val.getUTCFullYear() + '-' +
                        f(val.getUTCMonth() + 1) + '-' +
                        f(val.getUTCDate()) + 'T' +
                        f(val.getUTCHours()) + ':' +
                        f(val.getUTCMinutes()) + ':' +
                        f(val.getUTCSeconds()) + 'Z'
                    : null;
            }
            //基本数据类型
            function formatMetaData(val) {
                var res;
                if (val instanceof Date) {
                    res = formatDate(val)
                    if (res === null)
                    { res = "null"; }
                }
                else if (typeof (val) === "undefined") {
                    res = "undefined";
                }
                else if (val === null) {
                    res = "null";
                }
                else if (typeof (val) === "string") {
                    res = '"' + val + '"';
                }
                else {
                    res = val.valueOf();
                }
                return res;
            }
            //Object
            function formatObj(obj) {
                var res = "{";
                if (obj instanceof Date) {
                    obj = formatDate(obj);
                    if (obj != null) {
                        return obj;
                    }
                }
                if (obj === null) {
                    return "null";
                }
                for (var p in obj) {
                    res = res + """ + p + "":" + format(obj[p], false) + ",";
                }
                res = res.substr(0, res.length - 1);
                res = res + "}";
                return res;
            }
            //所有数据类型处理的入口(blnImport是否是入口)
            function format(args, blnImport) {
                var res = "";
                if (blnImport == true) {
                    if (args.length == 0)
                        return "";
                    else if (args.length == 1) {
                        args = args[0];
                    }
                }
                if (args instanceof Array) {
                    var arr = [];
                    for (var i = 0; i < args.length; i++) {
                        arr.push(format(args[i], false));
                    }
                    res = "[" + arr.join(",") + "]";
                }
    
                else if (typeof (args) === "object") {
                    res = formatObj(args);
                }
                else {
                    res = formatMetaData(args);
                }
    
                return res;
            }

    调用

    <head>
        <title>Barlow Console</title>
        <script src="barlow.console.js" type="text/javascript"></script>
        <script src="json2.js" type="text/javascript"></script>
        <script type="text/javascript" charset="uft-8">
    
            function testPrint() {
                //基本数据类型
                var a = "test";
                var e;
                barlow.console.printline(e);
                barlow.console.printline(null);
                barlow.console.printline(1);
                barlow.console.printline(11.1);
                barlow.console.printline(true);
                barlow.console.printline(a);
                barlow.console.printline(1 / 0);
                barlow.console.printline(new Date())
                barlow.console.printline("----------------")
                //数组
                barlow.console.printline([a, a]);
                //Object
                barlow.console.printline({ "a": 1, "b": { "a": "abcfaa" }, "bac": { a: [1, 2, 3, 4]} });
                //JSON2
                barlow.console.printline("JSON2");
                barlow.console.printline(JSON.stringify({ "a": 1, "b": { "a": "abcfaa" }, "bac": { a: [1, 2, 3, 4]} }));
                barlow.console.printline("JSON2");
                barlow.console.printline(JSON.stringify({ "a": 1, "b": { "a": "abcfaa" }, "bac": { a: [1, 2, 3, 4]} }, {},4));
            }
        </script>
    </head>
    <body>
        <input type="button" value="Test" onclick="testPrint()" />
        <div style="height: 2000px;">
        </div>
    </body>
    </html>

    结果为

    image

      这个js插件目前只支持ie8及以上,但我觉得已经够用了,怎么说微软今年也不支持xp了,所以这个插件我觉得还是可以作为学习js或者调试的时候使用.

    写的后面的话

      在园子里逛了一年多了,学了多少东西.同时看见各大位大牛写的文章那是相当的佩服.在这我也小露一手,同时也希望往后能够坚持下来,将自己的学习的东西还有一些心得能够用自己的文字记录下来.

    下载

  • 相关阅读:
    调用匿名函数的骚操作
    angular,vue,react的父子通信
    JavaScript高阶函数的应用
    图解javascript中this指向
    前端开发必备
    MEAN-全栈javascript开发框架
    MongoDB初识
    ES6新特性概览
    为什么是link-visited-hover-active
    CSS布局 — 圣杯布局与双飞翼布局
  • 原文地址:https://www.cnblogs.com/gangtianci/p/3520173.html
Copyright © 2011-2022 走看看