cnblogs 代码高亮显示后的代码复制问题解决实现代码 |
本文标签:代码高亮,代码复制 没想到最近(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 打包下载 |