工具
浏览器插件:tampermonkey 油猴
JS脚本:nameldk 的《复制为Markdown格式》 0.3.1版本
基础上添加代码。
需求
看到网页中想要保存的内容,复制保存,样式经常会变形。
带上样式的复制,相当于保存了很多无用的样式,后续编辑也会变得复杂。
程序员做笔记最简洁的就是markdown了,如果能直接转存为markdown格式就好了,样式统一,编辑也方便。
于是乎找了上面的工具和脚本,实现html转markdown。
其支持标签区块识别(像是印象笔记或有道云笔记的网页剪辑那种),随选随转,十分方便。
转换代码块、图片、超链接文字都很好,
唯一的缺点就是不支持table转换。
table在网页中可是太常见了,
尤其是程序员列个清单用法什么的,基本都用表格形式。
所以需要让现有的工具,支持table标签转换。
实现
下面就是需要添加的内容,使其在原有的基础上,支持了table转换。
测试了几个我想保存的页面,没什么问题。至于其他网页碰到再说,暂不确定兼容情况。
在转换规则中,添加tr、td&th、table规则
删掉顶部的// @require
那句,将其引用的turndown.js内容完整复制,粘贴到在JS脚本头部,然后在其中添加table转换的部分。
// // ==============================================================================
// // 在turndown中添加的转换table部分(author:watfe)
// // ==============================================================================
rules.td = {
filter: ['td','th'],
replacement: function (content, node, options) {
content = content.replace('|','/');
content = content.replace('\n','; ');
return '|'+content
}
};
rules.tr = {
filter: ['tr'],
replacement: function (content, node, options) {
return '|\n'+content
}
};
function repeatStringNumTimes(str, num) { //字符串重复N次
let repeatStr = '';
for(let i = 0; i < num; i++){
repeatStr += str;
}
return repeatStr;
}
rules.table = {
filter: ['table'],
replacement: function (content, node, options) {
// 删首尾空,删除最前面多余的|,并在最后补全|
content = content.trim();
content = content.replace(/\n+/g, '\n');
if (content.indexOf('|')===0){
content = content.substring(1, content.length)+'|';
}
// 检查表格包含几个|,数字减1就是列数,模拟出markdown表格中间的---:
var verticalLineCount = content.substring(content.lastIndexOf("\n") + 1, content.length).match(/\|/ig).length
var tableMDLine = '|'+repeatStringNumTimes('---|',verticalLineCount-1);
// 检查是否包含表头
if (content.indexOf('\n|\n')>0){
content = content.replace('\n|\n', '|\n'+tableMDLine+'\n');
}
else{
content = repeatStringNumTimes('|',verticalLineCount)+'\n'+ content;
}
//console.log(content);
return content
}
};
// // ==============================================================================
// // 添加完毕
// // ==============================================================================
调整markdown输出格式
比如:h1用#而不是下划线,代码块用```等等。
在JS脚本建立TurndownService实例前,加入这些配置。
// ==============================================================================
// 根据turndown文档,调整一些参数,让转化出来的markdown格式,满足自己的需要
// https://github.com/domchristie/turndown
// ==============================================================================
let options = {
headingStyle: 'atx',
bulletListMarker: '+',
codeBlockStyle: 'fenced',
emDelimiter: '*'
};
// ==============================================================================
// 添加完毕
// ==============================================================================
let turndownService = new TurndownService(options);
测试
转换成功