Posted in Javascript onDecember 14, 2011
没想到最近(2012年12月份)实现代码复制问题,要不所有内容都是一行,只有拥有工具的人士才能很快的看到代码,这样代码用起来就简单多了,可以直接复制了啊,不用每次是转化什么的。
这篇文章技术是技术为主,看看他们用了什么方法,需要的朋友可以参考下。为方便备份,先打包一份代码,有需要的自己研究。
//#region Copy&Run Code $(function () { var hlCodes = $("#cnblogs_post_body div.cnblogs_code"); if (hlCodes.length) { loadEncoderJs(); $.each(hlCodes, function () { var htmlContent = $(this).html(); $(this).html(htmlContent.replace(/(<br\s*\/?>){3}/gi, '<br/><br/>')); if ($(this).find("div.cnblogs_code_hide").length == 0) { if (parseInt($(this).css("height"), 10) > 30) { showCopyCode($(this)); var regex = /<script\s+type=[\"\']text\/javascript[\"\']>/gi; if (regex.test($(this).text())) { showRunCode($(this)); } } } }); } }); function showCopyCode(element) { $(element).append('<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)">复制代码</a></span>'); } function loadEncoderJs() { var encoderJs = document.createElement('script'); encoderJs.type = 'text/javascript'; encoderJs.src = 'http://common.cnblogs.com/script/encoder.js'; var node = document.getElementsByTagName('script')[0]; node.parentNode.insertBefore(encoderJs, node); } function copyCnblogsCode(element) { var codeContainer = getCnblogsCodeContainer(element); var cbCode = getCnblogsCodeText(codeContainer); var textarea = document.createElement('textarea'); $(textarea).val(cbCode).select(); $(textarea).css("width", $(codeContainer).css("width")); $(textarea).css("height", $(codeContainer).css("height")); $(textarea).css("font-family", "Courier New"); $(textarea).css("font-size", "12px"); $(textarea).css("line-height", "1.5"); $(codeContainer).parent().html(textarea); $(textarea).select(); $("<div>按 Ctrl+C 复制代码</div>").insertAfter($(textarea)); } function getCnblogsCodeContainer(element) { var codeContainer = $(element).parent().parent().parent().find("pre"); if (codeContainer.length == 0) { codeContainer = $(element).parent().parent().parent().find("div").first(); } return codeContainer; } function getCnblogsCodeText(codeContainer) { var cbCode = '\n' + $(codeContainer).html() .replace(/ /g, ' ') .replace(/<br\s*\/?>/ig, '\n') .replace(/<[^>]*>/g, ''); cbCode = cbCode.replace(/\n(\s*\d+)/ig, '\n'); cbCode = cbCode.replace(/\n/g, '\r\n'); if (typeof Encoder != undefined) { cbCode = Encoder.htmlDecode(cbCode); } cbCode = $.trim(cbCode); return cbCode; } function showRunCode(element) { var codeCopyDiv = $(element).find("div.cnblogs_code_toolbar"); if (codeCopyDiv.length) { $(codeCopyDiv).append('<span class="cnblogs_code_runjs"><a href="javascript:void(0);" onclick="runJsCode(this)">运行代码</a></span>'); } } function runJsCode(element) { var codeContainer = getCnblogsCodeContainer(element); var cbCode = getCnblogsCodeText(codeContainer); var newwin = window.open('', "_blank", ''); newwin.document.open('text/html', 'replace'); newwin.opener = null; newwin.document.write(cbCode); newwin.document.close(); } //#endregion
打包下载
cnblogs 代码高亮显示后的代码复制问题解决实现代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@