为博客园文章中插入的代码片段加一个运行按钮

软件设计 2017-04-17

安科开发里大家都分享了很多的有用知识,看到好的代码,总想拿到手上去试一下,然后慢慢体会!如果是展示一段完整能运行的代码,若能给读者提供一个【运行代码】的按钮,就方便多了!前两天开通了安科开发的JS权限(发邮件到[email protected]可以申请开通),今天先拿这个试了一下手,先来体验一把吧:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>为行博客园中的代码添加一个运行代码按钮</title>
</head>

<body>
<h1>Hello, world!</h1>
</body>
</html>

点右上方的按钮试试看吧!没错,在一个新窗口中正确的显示了Hello, world!下面来说一下实现的步骤:

【情况分析】

安科开发里正常插入的代码是由一个这样的大致结构组成的,如下所示:

<div class="cnblogs_code">
    <pre>
        //这里是你的代码
        //不过这段代码是经过cnblogs编辑器重新组织的一段html代码
    </pre>
</div>

只要能够获得这个cnblogs_code下pre里的内容,并将这一段内容输出到一个新的窗口中,目标基本就实现了。这个实现的方法很简单,直接用jQuery就可获得,代码如下:

var code = $('.cnblogs_code').text();
//注意这里不要用html(),否则你得到的将是一段cnblogs编辑器重组后的html代码

如此,基本的思路便出来了:

1)在每一段代码区后面自动添加一个按钮,这样就不用手动去添加代码按钮了。看到有些博客朋友是手动添加按钮和增加一个textarea来放入代码实现的,这并不科学。

2)为该按钮绑定动作,点击时运行对应的代码片断。

3)有些代码片断不想添加运行代码按钮怎么办?我们只要手动为每一个代码断片增加一个can_run的className(进入到编辑的html模式下添加给代码区域一个can_run即可),然后在JS中只获取can_run里的代码,而不是cnblogs_code下的代码。如下图所示:

为博客园文章中插入的代码片段加一个运行按钮

 【JS代码的实现】

因为安科开发页面自动引入了jQuery,那么接下来的实现我全部用jQuery来操作,实现代码如下:

$(function() {
    /* 获得整个页面可被运行的代码片断*/
    var code = $('.can_run');

    /*为每个can_run的代码区域添加按钮并绑定事件*/
    code.each(function() {
        var button = $('<button class="runcode">运行上面的代码</button>'), //按钮
            p = $('<p style="text-align:right;"></p>'), //按钮加入到段落中
            $this = $(this); //保存当前代码区域的引用

        /*组织结构,并在can_run之后添加这个结构*/
        p.append(button);
        $this.after(p);

        /*为当前代码片段对应的按钮绑定点击事件*/
        button.on('click', function() {
            var win = window.open('', '_blank', ''); //开启新窗口
            win.document.write( $this.text() ); //向新窗口输出内容
        });
    });
});

【这个JS代码放哪?】

1、直接将这段JS保存到本地,然后上传到你的安科开发后台。【操作路径:管理 >> 文件 >> 选择文件并上传】

2、在博客设置里加入对这个JS文件的引用【操作路径:管理 >> 设置 >> 页首HTML代码】

<script src="你上传的js文件位置"></script>

如果你不想这么麻烦,可以直接引我上传的JS文件:

<script src="http://files.cnblogs.com/files/langzs/runcode.js"></script>

【接下来做什么?】

接下来,你只要像往常一样将代码插入到文章中即可,如果有需要提供运行的代码片断,直接进入HTML模式,给该片断加一个can_run的className值即可。这个实现并不是复杂的逻辑,但确实能给我们带来一定的方便性。

相关推荐

安得情怀似旧时 / 0评论 2019-10-27
80417606 / 0评论 2007-03-06