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 = "\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 自定义输出的更多相关文章
- Lrc2srt精灵,增加自定义输出编码
2015.4.8 对中文支持有点问题,修改了一下,支持自定义输出编码! 修改了建议行末偏移,通常100到200最好了,人的反应时间! http://files.cnblogs.com/files/ro ...
- Javascript事件模型系列(四)我所理解的javascript自定义事件
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...
- javascript自定义滚动条插件,几行代码的事儿
在实际项目中,经常由于浏览器自带的滚动条样式太戳,而且在各个浏览器中显示不一样,所以我们不得不去实现自定义的滚动条,今天我就用最少的代码实现了一个自定义滚动条,代码量区区只有几十行,使用起来也非常方便 ...
- JavaScript自定义事件
很多DOM对象都有原生的事件支持,向div就有click.mouseover等事件,事件机制可以为类的设计带来很大的灵活性,相信.net程序员深有体会.随着web技术发展,使用JavaScript自定 ...
- EDIUS设置自定义输出的方法
在做后期视频剪辑时,往往根据需求,需要输出不同分辨率格式的视频文件,那在EDIUS中,如何自定义输出设置,使之符合自己的需要呢?下面小编就来详细讲讲EDIUS自定义输出的一二事吧. 当剪辑完影片,设置 ...
- javascript自定义浏览器右键菜单
javascript自定义浏览器右键菜单 在书上看到document对象还有一个contextmenu事件,但是不知为什么w3school中找不到这个耶... 利用这个特性写了个浏览器的右键菜单, ...
- javascript:自定义事件初探
javascript:自定义事件初探 http://www.cnblogs.com/jeffwongishandsome/archive/2008/10/27/1317148.html
- 理解的javascript自定义事件
理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...
- Log4j扩展使用--自定义输出
写在前面的话 log4j支持自定义的输出.所有的输出都实现了自Appender接口.一般来说,自定义输出值需要继承AppenderSkeleton类,并实现几个方法就可以了. 写这篇博客,我主要也是想 ...
随机推荐
- C# 根据列名获取列值
/// <summary> /// 根据列名获取列值 /// </summary> /// <param name="colName">< ...
- JAVA GET 和 POST 的区别
GET 和 POST 的区别 GET请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=val ...
- 24个常用 Python 实现
24个常用 Python 实现 1.冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport(): for i in ...
- Kibana6.x.x源码分析--ngReact使用
ngReact GitHub地址:https://github.com/ngReact/ngReact
- 让Nginx支持pathinfo
# 典型配置 location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_ ...
- PHP_$_SERVER中QUERY_STRING,REQUEST_URI的用法
$_SERVER存储当前服务器信息,其中有几个值如 $_SERVER["QUERY_STRING"], $_SERVER["REQUEST_URI"], $_S ...
- [转] 一个简单的零配置命令行HTTP服务器 - http-server (nodeJs)
[From] http://www.cnblogs.com/lucker/p/4108838.html http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不 ...
- 地牢逃脱----DFS搜索最优解
https://www.nowcoder.com/practice/0385945b7d834a99bc0010e67f892e38?tpId=85&tqId=29831&tPage= ...
- linux中终端字体样式显示不正常
问题:Centos终端中,字体显示不正常,中间感觉有空格,空格和单词傻傻分不清. 解决办法: yum groupinstall "Chinese Support" yum grou ...
- QWebView使用
问题: 开始编译的时候在pro文件中要加上 QT += core gui webkitwidgets 文件使用部分加上 #include<QtWebKitWidgets/QWebView&g ...