Javascript:console.log 到 html

IT技术 javascript
2021-03-07 04:29:24

我想将 console.log 输出写入 div 层。

例如:

document.write(console.log(5+1)); //Incorrect, random example

有人可以给我解决我的问题吗?

谢谢你。

编辑:

我的意思是,例如:

console.log("hi");

它在屏幕上显示输出“hi”。

注意:示例:http : //labs.codecademy.com/# : workspace

6个回答

您可以覆盖的默认实现 console.log()

(function () {
    var old = console.log;
    var logger = document.getElementById('log');
    console.log = function (message) {
        if (typeof message == 'object') {
            logger.innerHTML += (JSON && JSON.stringify ? JSON.stringify(message) : message) + '<br />';
        } else {
            logger.innerHTML += message + '<br />';
        }
    }
})();

演示:小提琴

@Nitin 的答案更好,因为它处理对象:stackoverflow.com/a/35449256/470749
2021-04-21 04:29:24
String(message)? 为什么不只是message
2021-04-25 04:29:24
你能告诉我们如何像在 console.log 中一样为上面函数的输出添加颜色吗?谢谢!!!
2021-04-25 04:29:24
除了继续使用默认的 console.log 功能外,添加 'old(message);' 在新的 console.log 函数的末尾。
2021-05-08 04:29:24

@arun-p-johny 的回答略有改进:

在 HTML 中,

<pre id="log"></pre>

在js中,

(function () {
    var old = console.log;
    var logger = document.getElementById('log');
    console.log = function () {
      for (var i = 0; i < arguments.length; i++) {
        if (typeof arguments[i] == 'object') {
            logger.innerHTML += (JSON && JSON.stringify ? JSON.stringify(arguments[i], undefined, 2) : arguments[i]) + '<br />';
        } else {
            logger.innerHTML += arguments[i] + '<br />';
        }
      }
    }
})();

开始使用:

console.log('How', true, new Date());
我有点困惑,我对Javascript很陌生,这个函数的结构是什么。第一个括号,为什么?最后一个括号对是什么?
2021-04-17 04:29:24
@DaPole 它包含在一个自动执行的匿名函数中。
2021-05-10 04:29:24
为了保持原来的console.log功能old(...arguments);,在新的控制台日志功能的末尾添加请记住使用扩展运算符!
2021-05-11 04:29:24
old.apply(console, arguments); 还将努力保留原始论点。
2021-05-15 04:29:24

聚会有点晚了,但我更进一步地接受@Hristiyan Dodov 的回答

现在重新连接所有控制台方法,并且在文本溢出的情况下,包括可选的自动滚动到底部颜色现在基于日志记录方法而不是参数。

rewireLoggingToElement(
    () => document.getElementById("log"),
    () => document.getElementById("log-container"), true);

function rewireLoggingToElement(eleLocator, eleOverflowLocator, autoScroll) {
    fixLoggingFunc('log');
    fixLoggingFunc('debug');
    fixLoggingFunc('warn');
    fixLoggingFunc('error');
    fixLoggingFunc('info');

    function fixLoggingFunc(name) {
        console['old' + name] = console[name];
        console[name] = function(...arguments) {
            const output = produceOutput(name, arguments);
            const eleLog = eleLocator();

            if (autoScroll) {
                const eleContainerLog = eleOverflowLocator();
                const isScrolledToBottom = eleContainerLog.scrollHeight - eleContainerLog.clientHeight <= eleContainerLog.scrollTop + 1;
                eleLog.innerHTML += output + "<br>";
                if (isScrolledToBottom) {
                    eleContainerLog.scrollTop = eleContainerLog.scrollHeight - eleContainerLog.clientHeight;
                }
            } else {
                eleLog.innerHTML += output + "<br>";
            }

            console['old' + name].apply(undefined, arguments);
        };
    }

    function produceOutput(name, args) {
        return args.reduce((output, arg) => {
            return output +
                "<span class=\"log-" + (typeof arg) + " log-" + name + "\">" +
                    (typeof arg === "object" && (JSON || {}).stringify ? JSON.stringify(arg) : arg) +
                "</span>&nbsp;";
        }, '');
    }
}


setInterval(() => {
  const method = (['log', 'debug', 'warn', 'error', 'info'][Math.floor(Math.random() * 5)]);
  console[method](method, 'logging something...');
}, 200);
#log-container { overflow: auto; height: 150px; }

.log-warn { color: orange }
.log-error { color: red }
.log-info { color: skyblue }
.log-log { color: silver }

.log-warn, .log-error { font-weight: bold; }
<div id="log-container">
  <pre id="log"></pre>
</div>

现在的问题是,如何轻松添加 console.time 和 console.timeEnd?
2021-04-17 04:29:24
干得好。但是分组和表格数据呢?是否已经有一些 Web 组件或 jQuery 插件“为您提供了一个作为网页实现的开发人员控制台”?
2021-04-24 04:29:24
Botteman,似乎在 android 上的 chrome 68 上不起作用!
2021-04-25 04:29:24
这段代码是什么意思?rewireLoggingToElement(() => document.getElementById("log"), () => document.getElementById("log-container"), true); 你为什么将箭头函数传递给函数?它是有效的 javascript,但对我来说似乎很陌生。
2021-04-27 04:29:24
@Gaetano,这些是简单的闭包。使用函数变量,您可以延迟执行它们,直到实际需要结果(例如,在 DOM 尚未初始化或将来会发生变化的情况下)。
2021-05-12 04:29:24

我来的有点晚了Arun P Johny's answer的更高级版本他的解决方案不处理多个console.log()参数,也不提供对原始函数的访问。

这是我的版本:

(function (logger) {
    console.old = console.log;
    console.log = function () {
        var output = "", arg, i;

        for (i = 0; i < arguments.length; i++) {
            arg = arguments[i];
            output += "<span class=\"log-" + (typeof arg) + "\">";

            if (
                typeof arg === "object" &&
                typeof JSON === "object" &&
                typeof JSON.stringify === "function"
            ) {
                output += JSON.stringify(arg);   
            } else {
                output += arg;   
            }

            output += "</span>&nbsp;";
        }

        logger.innerHTML += output + "<br>";
        console.old.apply(undefined, arguments);
    };
})(document.getElementById("logger"));

// Testing
console.log("Hi!", {a:3, b:6}, 42, true);
console.log("Multiple", "arguments", "here");
console.log(null, undefined);
console.old("Eyy, that's the old and boring one.");
body {background: #333;}
.log-boolean,
.log-undefined {color: magenta;}
.log-object,
.log-string {color: orange;}
.log-number {color: cyan;}
<pre id="logger"></pre>

我把它一个微小的一点,并增加了一个类来每个日志,所以你可以颜色它。它输出在 Chrome 控制台中看到的所有参数。您还可以通过 访问旧日志console.old()

这是上面脚本的缩小版本,用于内联粘贴,仅供您使用:

<script>
    !function(o){console.old=console.log,console.log=function(){var n,e,t="";for(e=0;e<arguments.length;e++)t+='<span class="log-'+typeof(n=arguments[e])+'">',"object"==typeof n&&"object"==typeof JSON&&"function"==typeof JSON.stringify?t+=JSON.stringify(n):t+=n,t+="</span>&nbsp;";o.innerHTML+=t+"<br>",console.old.apply(void 0,arguments)}}
    (document.body);
</script>

document.body括号中的内容替换为您希望登录的任何元素。

我知道这是一个旧线程,但我刚刚开始在移动应用程序中使用它。一个问题:如何显示生成日志的文件和行?
2021-04-22 04:29:24
再往前走一点,添加清晰的控制台!;-)
2021-05-04 04:29:24
更进一步地采取了这个解决方案现在包括溢出时自动滚动并重新连接所有控制台方法,而不仅仅是.log().
2021-05-06 04:29:24
我不认为你可以。你根本就没有得到这些信息。如果它是一个应用程序,您应该寻找其他调试选项,例如 USB 调试。
2021-05-12 04:29:24

创建输出

<div id="output"></div>

使用 JavaScript 写入它

var output = document.getElementById("output");
output.innerHTML = "hello world";

如果您希望它处理更复杂的输出值,您可以使用 JSON.stringify

var myObj = {foo: "bar"};
output.innerHTML = JSON.stringify(myObj);