缘由

前段时间再看了一些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 = "\u005b\u005b\u005d\u005d"; //[[]]
btnMax.innerText = "\u005b\u005b\u005d\u005d"; 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>

结果为

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

写的后面的话

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

下载

Javascript 自定义输出的更多相关文章

  1. Lrc2srt精灵,增加自定义输出编码

    2015.4.8 对中文支持有点问题,修改了一下,支持自定义输出编码! 修改了建议行末偏移,通常100到200最好了,人的反应时间! http://files.cnblogs.com/files/ro ...

  2. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  3. javascript自定义滚动条插件,几行代码的事儿

    在实际项目中,经常由于浏览器自带的滚动条样式太戳,而且在各个浏览器中显示不一样,所以我们不得不去实现自定义的滚动条,今天我就用最少的代码实现了一个自定义滚动条,代码量区区只有几十行,使用起来也非常方便 ...

  4. JavaScript自定义事件

    很多DOM对象都有原生的事件支持,向div就有click.mouseover等事件,事件机制可以为类的设计带来很大的灵活性,相信.net程序员深有体会.随着web技术发展,使用JavaScript自定 ...

  5. EDIUS设置自定义输出的方法

    在做后期视频剪辑时,往往根据需求,需要输出不同分辨率格式的视频文件,那在EDIUS中,如何自定义输出设置,使之符合自己的需要呢?下面小编就来详细讲讲EDIUS自定义输出的一二事吧. 当剪辑完影片,设置 ...

  6. javascript自定义浏览器右键菜单

    javascript自定义浏览器右键菜单   在书上看到document对象还有一个contextmenu事件,但是不知为什么w3school中找不到这个耶... 利用这个特性写了个浏览器的右键菜单, ...

  7. javascript:自定义事件初探

    javascript:自定义事件初探   http://www.cnblogs.com/jeffwongishandsome/archive/2008/10/27/1317148.html

  8. 理解的javascript自定义事件

    理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...

  9. Log4j扩展使用--自定义输出

    写在前面的话 log4j支持自定义的输出.所有的输出都实现了自Appender接口.一般来说,自定义输出值需要继承AppenderSkeleton类,并实现几个方法就可以了. 写这篇博客,我主要也是想 ...

随机推荐

  1. springMVC上传功能(单文件和多文件上传)

    单文件和多文件上传 首先在xxx-select.xml里面配置上传的大小和编码 <bean id="multipartResolver" class="org.sp ...

  2. python学习,day2:列表的复制

    主要涉及列表的潜复制(第二层受后面修改的影响)和深复制(不受后面修改的影响) 代码如下 # coding=utf-8 # Author: RyAn Bi import copy names = ['A ...

  3. perl中一些模块的ubuntu中依赖包

    GD 先更新系统中的依赖包: sudo apt-get update sudo apt-get upgrade 进入 cpan> install GD 会提示没有安装libgd模块. 所以,先需 ...

  4. DEM反应不收敛问题

    之前算DEM反应一直不收敛,后来把计算规模减少到两个固定颗粒,也就是仿照reactive-chemistry和evaperation这两个算例. 目前reactive-chemistry这个算例,把各 ...

  5. 洛谷 P2680 运输计划(NOIP2015提高组)(BZOJ4326)

    题目背景 公元 \(2044\) 年,人类进入了宇宙纪元. 题目描述 公元\(2044\) 年,人类进入了宇宙纪元. L 国有 \(n\) 个星球,还有 \(n-1\) 条双向航道,每条航道建立在两个 ...

  6. Codeforces - 915E 离散化区间覆盖

    我一直以来都错认为离散化就是换个映射,其实还需要在离散值两端加上相差为1的值才能真正离散 不然看一下test3就知道 不过这个离散姿势太暴力,以至于我1000ms时限跑出998ms(其实是太懒没有删重 ...

  7. restFull接口实现web

    1. 模板引擎JSP的限制 在开始之前呢,我觉得我们有必要先去了解下 Spring Boot 2.0 官方文档中提到的如下内容: 模板引擎 除了REST Web服务之外,还可以使用Spring MVC ...

  8. 在python3.5中pip安装scrapy,遇到 error: Microsoft Visual C++ 14.0 is required

    本来在python3.5中安装scrapy一路顺畅(pip install scrapy),中间遇到一个 error: Microsoft Visual C++ 14.0 is required. x ...

  9. maven-javadoc-plugin

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javad ...

  10. forEach和map和for方法的区别

    JS中的forEach.$.each.map方法推荐 转载  2016-04-05   投稿:jingxian    我要评论 下面小编就为大家带来一篇JS中的forEach.$.each.map方法 ...