Javascript: console.log to html
Я хотел бы написать вывод console.log в div-слой.
Например:
document.write(console.log(5+1)); //Incorrect, random example
Может ли кто-нибудь дать мне решение моей проблемы?
Спасибо.
EDIT:
что я имел в виду, например:
console.log("hi");
и он отображает вывод "hi" на экране.
Примечание. Пример: http://labs.codecademy.com/#:workspace
Ответы
Ответ 1
Вы можете переопределить реализацию по умолчанию 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 />';
}
}
})();
Демо: Fiddle
Ответ 2
Небольшое улучшение ответа @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());
Ответ 3
Я немного опоздал с более продвинутой версией ответа Аруна П. Джонни. Его решение не обрабатывает несколько аргументов 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> ";
}
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 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>
Ответ 4
Немного опоздал на вечеринку, но я взял @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> ";
}, '');
}
}
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>
Ответ 5
Создать выход
<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);