软件设计 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下的代码。如下图所示:

因为安科开发页面自动引入了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() ); //向新窗口输出内容
});
});
}); 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值即可。这个实现并不是复杂的逻辑,但确实能给我们带来一定的方便性。