跨行与跨列的表格转换会出错

使用问题 · 604 次浏览
johnson_su 创建于 2022-03-17 10:10

作者您好,感谢您开发这个动作,真得很好用。只是在表格跨行与跨列转换会出问题,我看了turndown的源码它本身也没有提供支持。不知道有没有办法增强一下。

https://www.w3school.com.cn/tiy/t.asp?f=eg_html_table_span


回复内容
wordpure 2022-03-17 13:14
#1

之前误会留言的意思了,还以为说的是 Quicker 公共API 转换表格出错的问题😂


johnson_su 2022-03-21 15:01 :

如果能够下载图片就完美了。

johnson_su 最后更新于 2022-03-21 15:03
wordpure 回复 johnson_su 2022-03-21 23:36 :

你想要的可能是剪藏,不是复制😂

webclipper/web-clipper

mika-cn/maoxian-web-clipper

wordpure 最后更新于 2022-03-21 23:42
johnson_su 回复 wordpure 2022-03-22 11:06 :

谢谢,这个动作是最符合我的需求。要不我自己继续努力,有一个作者在你插件基础上增加图片下载的功能,不过他在移植你代码的时候可能有些地方没有完全理解,所以有些小小的问题。比如代码块摘录时会出问题,偏偏 这个我用得最多。https://getquicker.net/Sharedaction?code=09dc69e5-275f-47ff-740c-08d98ead6925,另外国内有人对turndown代码进行了优化,https://sitdown.mdnice.com/zh-hans/%E7%A4%BA%E4%BE%8B.html,不知道对你完善这个动作可有帮助。他针对一些知名网站有不同优化策略,https://sitdown.mdnice.com/zh-hans/%E6%8F%92%E4%BB%B6.html

johnson_su 回复 wordpure 2022-03-22 11:09 :

另外我尝试一下,用这个函数可以获取没有安装quicker插件的浏览器选中内容,而且是html格式,。

function getSelectionText() {
 var selectionObj = window.getSelection(); 
 var rangeObj = selectionObj.getRangeAt(0);
 var docFragment = rangeObj.cloneContents();
 var testDiv = document.createElement("div");
 testDiv.appendChild(docFragment);
 var selectHtml = testDiv.innerHTML;
 return selectHtml
 }
getSelectionText()

wordpure 回复 johnson_su 2022-03-22 11:21 :

感谢,sitdown 之前我有看过,本来是打算改成它,后面不知道为什么没换,我晚上再看看要不要替换掉。

wordpure 回复 johnson_su 2022-03-22 11:25 :

看了一下那个动作,思路应该是没有问题,正则提取图片链接,下载后替换成本地图片路径。可以改一下它的匹配和替换模块看有没有改善。

wordpure 回复 johnson_su 2022-03-22 11:31 :

这个函数好像是动作先前用的,因为在 Firefox 里无法运行,所以被我换成现在的版本了。

不过不管那个版本,不安装 Quicker 的扩展程序都用不了 turndown。看起来有效是因为,我在后面加了一个判断,运行脚本失败后改用 Quicker 自带模块获取选中文本。


wordpure 回复 johnson_su 2022-03-22 11:36 :

新话题不太适合发在原来的评论下面,可以开一个新的帖子或回复。


wordpure 2022-03-17 13:49
#2

其实这个问题,只有跨列转换那部分是 turndown 的锅,跨行不转换是对的。

因为 GFM 里并没有定义 colspan 和 rowspan 要怎么写,所以只能保留原来的 HTML 代码,让渲染器自己转换,就像下面这样。


wordpure 2022-03-17 14:12 :

晚上我看一下,能不能区分一下这部分,或者干脆把所有的表格都保留为 html 格式。

johnson_su 2022-03-17 14:45
#3

千万不要保留html格式,可能我有点强迫症,markdown文档尽可能是规范格式,我初步想法是:跨列就是在程序里增加一个判断。cosplan=n,第一行增加n-1个“|”,首行可能在第二行增加n-1个”--|“,的,跨行可能麻烦点,要加一个循环。因为我才接触quicker时间比较短,调试最简单脚本都没有成功。不过我可以帮你做一些测试。。。:)

wordpure 2022-03-17 17:36 :

你的意思,应该是把跨行或跨列的单元格拆分成多个具有相同内容的单元格,像下面这样。


但我觉得这不是个好主意😂

因为 1 和 2 其实并不等价,转换后它的结构已经变了,把生成的 Markdown 再转回 HTML 也和原来不一样了。

wordpure 最后更新于 2022-03-17 17:37
wordpure 回复 wordpure 2022-03-17 17:51 :

而且表格除了 colspan、rowspan 之外,还有单元格内换行,甚至嵌套表格,这种只能用 HTML 表述。

wordpure 2022-03-17 17:55 :

另外,HTML 标签从 Markdown 创建开始就是规范的一部分了。

Daring Fireball: Markdown Syntax Documentation

wordpure 回复 wordpure 2022-03-17 18:04 :

如果确实想要的话,Turndown 支持添加替换规则,可以把它加到「子程序 - 浏览器扩展 - 脚本内容」这里。

不过那就是 JavaScript 的范畴,和 Quicker 没什么关系了。


johnson_su 2022-03-18 19:09 :

是的,我本来的意思是想按你说的那样做,不过想想觉得你说的有道理,如果想解决所有表格问题算法有点太复杂,而且即便成功反而不规范了。不如不转换保留html语句是个好主意。

wordpure 2022-03-24 20:50
#5

看了一下,知道之前为什么没有换成 Sitdown 了。

Sitdown 对知乎、微信这些网站的优化没有包含在主文件里,是用 Plugin 的方式提供的,而这些 Plugin 的依赖比较多,不太好整合到动作里,只能通过模块引入。

但是,以 npm 的方式调用的话需要用户本地有安装 Node.js,直接嵌入到网页里又会受到浏览器的 CSP 和 CORS 限制。

所以应该不会换成 Sitdown 了😂

回复主贴