文章里测试区域的添加

当初匆匆整理了正则表达式,然后觉得有些地方缺了一些测试例子(不过不影响大体的使用)。最近心血来潮想规整一下,结果就顺势萌生了搞个可以修改的测试小框框~

基本思路就是用一个textarea编辑代码,点击按钮button后,获取这个textarea的值,然后通过eval()运行,把结果打印在button后的span里。

原本以为这不分分钟嘛,结果还真碰到些小发现、小麻烦与小不解,记录一下咯:

  1. 为了搞这个的样式,终于想起来看看我这个博客的默认样式是什么样的了,23333。
    然后,发现每一行自动被一个有margin-bottom的p标签包裹着,margin单位是em。一开始是准备用div显示运行结果的,结果发现这样就包不进去了,布局就与我希望的不同了……最后发现用span,并且把button和span写在同一行,就完美啦~

  2. 曾经卡在了button标签的事件触发上……
    第一反应:把事件添加在DOM上,然后可能是好久不写原生的js了,估计是有些语法错误,没发现,以为这个是不行的,于是进入第二反应;
    第二反应:用onclick,但是准备在文章中做多个测试框,必然不想一个一个添加事件啊,用了document.getElementsByTagName获取,想用forEach来添加事件的,但是——获取的是一个类似数组的节点列表,不能用这个方法,于是回到死磕第一反应……
    最后,终于搞定第一种方案啦,原本想用event传参,看看能不能获得序号的(textarea和span并不在一行里,通过button节点查找不方便),但是木有,然后又顿悟我是不是傻,我直接人工传参传index不就好了嘛,圆满解决~
    不过还是很在意第二方案怎么搞,我觉得肯定有办法的!

  3. 用了try…catch…finally
    人生第二次使用,js第一次使用,体验还是很棒的。用了这个后,即使是语法报错,也可以在span中查看咯,这样才像话嘛~

  4. 一个让我很在意的点——textarea里面换行的判断失灵
    一般在html里换行打内容,在显示到textarea里时就自动判断换行了。
    但是这次失灵了,直接写在html里也好,通过innerHTML赋值也好,对于<br/>的识别就是失灵了。最后是用过赋值,且所给字符串中用\n来换行实现的(直接写在html中不行)。
    不知道是markdown的影响,还是我的博客主题的影响。越来越有研究自己博客主题的需要了……

  5. 这里我真是尾巴都翘起来了,迫不及待过来炫耀一下:
    试运行的结果一般都是数组或者说object类型,在显示时需要转换成字符串形式,一开始我就简单粗暴的用了join()方法。
    但是很快发现,对于match和exec(一般就是它俩幺蛾子多),其返回的是匹配结果,以及匹配位置等信息,在用join后,只剩下匹配结果了。这可完全不能反映事情啊,console.log的输出可不是这样的。
    于是!我踏上了模拟console.log输出的展示之路,顺利完成~手动点赞!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var str, result = eval(text[index].value)
    if (typeof result == 'object') {
    str = "["
    for (var i in result) {
    if (i.match(/^(\d)+$/)) { // 数组
    str += ((typeof result[i] == 'string')? ('"' + result[i] + '"'): (result[i].toString())) + ', '
    } else{ // 对象
    str += i + ': ' + ((typeof result[i] == 'string')? ('"' + result[i] + '"'): (result[i].toString())) + ', '
    }
    }
    str = str.substr(0, str.length-2)
    str += "]"
    } else if (result == undefined) {
    str = ''
    } else {
    str = result.toString()
    }