您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Copy table as Markdown to clipboard
当前为
- // ==UserScript==
- // @name Table to Markdown Copier
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Copy table as Markdown to clipboard
- // @match *://*/*
- // @grant none
- // @author replica
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- let NL = "\n";
- init();
- // Find the table element
- function init() {
- const tables = document.querySelectorAll('table');
- console.log(tables.length);
- if (tables) {
- for(let table of tables) {
- // Create a new button element
- const button = document.createElement('button');
- button.textContent = 'Copy';
- // Set the button's style and position
- button.style.position = 'relative';
- button.style.top = '0';
- button.style.right = '0';
- button.style.zIndex = '9999';
- // Add a click event listener to the button
- button.addEventListener('click', () => {
- const markdown = convertTable(table);
- navigator.clipboard.writeText(markdown).then(function() {
- notification("Copied");
- console.log('Copying to clipboard was successful!');
- }, function(err) {
- console.error('Could not copy text: ', err);
- });
- });
- table.insertBefore(button, table.firstChild);
- }
- }
- }
- function notification(text) {
- let notification = document.createElement('div');
- notification.textContent = text;
- notification.style.position = 'fixed';
- notification.style.top = '20px';
- notification.style.right = '20px';
- notification.style.padding = '10px';
- notification.style.backgroundColor = '#323232';
- notification.style.color = '#fff';
- notification.style.borderRadius = "4px";
- notification.style.opacity = 0;
- notification.style.zIndex = '9999';
- notification.style.transition = 'opacity 0.5s ease-in-out';
- document.body.appendChild(notification);
- notification.style.opacity = '1';
- // 设置3秒后自动消失
- setTimeout(function() {
- notification.style.opacity = '0';
- }, 1000);
- }
- function convertTable(table) {
- let markdownResults = '';
- let markdownTable = convertTableElementToMarkdown(table);
- markdownResults += markdownTable + NL + NL;
- return markdownResults;
- }
- // https://github.com/johnbeech/html-table-to-markdown-converter/blob/master/table-converter.js
- function convertTableElementToMarkdown(tableEl) {
- let rows = [];
- let trEls = tableEl.getElementsByTagName('tr');
- for(let i=0; i<trEls.length; i++) {
- let tableRow = trEls[i];
- let markdownRow = convertTableRowElementToMarkdown(tableRow, i);
- rows.push(markdownRow);
- }
- return rows.join(NL);
- }
- function convertTableRowElementToMarkdown(tableRowEl, rowNumber) {
- let cells = [];
- let cellEls = tableRowEl.children;
- for(let i=0; i<cellEls.length; i++) {
- let cell = cellEls[i];
- cells.push(cell.innerText + ' |');
- }
- let row = '| ' + cells.join(" ");
- if(rowNumber == 0) {
- row = row + NL + createMarkdownDividerRow(cellEls.length);
- }
- return row;
- }
- function createMarkdownDividerRow(cellCount) {
- let dividerCells = [];
- for(let i = 0; i<cellCount; i++) {
- dividerCells.push('---' + ' |');
- }
- return '| ' + dividerCells.join(" ");
- }
- })();