HTML表格转化为Markdown表格

在指定网站的表格上方添加按钮,点击将表格以Markdown格式复制到剪贴板

目前为 2022-11-11 提交的版本。查看 最新版本

// ==UserScript==
// @name         HTML表格转化为Markdown表格
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  在指定网站的表格上方添加按钮,点击将表格以Markdown格式复制到剪贴板
// @author       You
// @match        https://blog.csdn.net/*
// @match        https://www.cnblogs.com/*
// @match        https://www.runoob.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=csdn.net
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    var NL = "\n";

    function convertTableElementToMarkdown(tableEl) {
        var rows = [];
        var trEls = tableEl.getElementsByTagName('tr');
        for(var i=0; i<trEls.length; i++) {
            var tableRow = trEls[i];
            var markdownRow = convertTableRowElementToMarkdown(tableRow, i);
            rows.push(markdownRow);
        }
        return rows.join(NL);
    }

    function convertTableRowElementToMarkdown(tableRowEl, rowNumber) {
        var cells = [];
        var cellEls = tableRowEl.children;
        for(var i=0; i<cellEls.length; i++) {
            var cell = cellEls[i];
            cells.push(cell.innerText + ' |');
        }
        var row = '| ' + cells.join(" ");

        if(rowNumber == 0) {
            row = row + NL + createMarkdownDividerRow(cellEls.length);
        }

        return row;
    }

    function createMarkdownDividerRow(cellCount) {
        var dividerCells = [];
        for(let i = 0; i<cellCount; i++) {
            dividerCells.push('---' + ' |');
        }
        return '| ' + dividerCells.join(" ");
    }


    function convertTable(x) {
        var content = "<table>" + x.innerHTML + "</table>";
        processor.innerHTML = content.replace(/\s+/g, ' ');

        var tables = processor.getElementsByTagName('table');
        var markdownResults = '';
        if(tables) {
            for(let e of tables) {
                var markdownTable = convertTableElementToMarkdown(e);
                markdownResults += markdownTable + NL + NL;
            }
            navigator.clipboard.writeText(markdownResults);
        }
        else {
            console.log('No table found');
        }
    }


    let processor = document.createElement("processor");
    let x = document.getElementsByTagName("table")
    for (let i = 0; i < x.length; i++){

        let one = document.createElement("button");
        one.innerText = "Copy";
        one.addEventListener('click', function () {
            convertTable(x[i])
        })
        x[i].parentNode.insertBefore(one, x[i])
    }


})();