您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
导出文一科技历史交易数据到Markdown
当前为
// ==UserScript== // @name dabanke-历史数据 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 导出文一科技历史交易数据到Markdown // @author YourName // @match *://www.dabanke.com/hangqing-*.html // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // 创建卡片内按钮 const btn = document.createElement('button'); btn.innerHTML = '<i class="bi bi-file-earmark-code"></i> 生成Markdown'; btn.className = 'btn btn-sm btn-outline-danger ms-3'; btn.style.verticalAlign = 'middle'; // 创建增强版弹窗 const modal = ` <div class="modal fade" id="dataModal" tabindex="-1"> <div class="modal-dialog modal-xl"> <div class="modal-content"> <div class="modal-header bg-light"> <h5 class="modal-title text-danger">数据预览 - 文一科技</h5> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <div class="modal-body p-0"> <div class="d-flex"> <!-- 预览区域 --> <div class="flex-grow-1 p-3 border-end" id="previewArea" style="max-height: 600px; overflow-y: auto;"> </div> <!-- 源码区域 --> <textarea id="markdownSource" class="d-none"></textarea> </div> </div> <div class="modal-footer bg-light"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">关闭</button> <button type="button" class="btn btn-success" id="copyBtn"> <i class="bi bi-clipboard"></i> 复制Markdown源码 </button> </div> </div> </div> </div>`; // 添加点击事件 btn.addEventListener('click', () => { // 获取标题 const header = document.querySelector('.card-header').innerText; // 获取表格数据 const table = document.querySelector('.table'); const headers = Array.from(table.querySelectorAll('th')).map(th => th.textContent.trim()); const rows = Array.from(table.querySelectorAll('tbody tr')).map(row => Array.from(row.querySelectorAll('td')).map(td => td.textContent.trim()) ); // 生成Markdown let markdown = `# ${header}\n\n`; markdown += `| ${headers.join(' | ')} |\n`; markdown += `| ${headers.map(() => '---').join(' | ')} |\n`; rows.forEach(row => { markdown += `| ${row.join(' | ')} |\n`; }); // 插入内容到弹窗 const tempDiv = document.createElement('div'); tempDiv.innerHTML = modal; document.body.appendChild(tempDiv); // 填充数据 document.getElementById('markdownSource').value = markdown; // 生成预览HTML const previewArea = document.getElementById('previewArea'); previewArea.innerHTML = ` <h3 class="text-center mb-3">${header}</h3> <table class="table table-bordered table-hover"> <thead class="table-light"> <tr>${headers.map(h => `<th>${h}</th>`).join('')}</tr> </thead> <tbody> ${rows.map(row => `<tr>${row.map(cell => `<td>${cell}</td>`).join('')}</tr>` ).join('')} </tbody> </table> `; // 初始化模态框 const myModal = new bootstrap.Modal(document.getElementById('dataModal')); myModal.show(); // 复制按钮事件 document.getElementById('copyBtn').addEventListener('click', () => { const source = document.getElementById('markdownSource').value; navigator.clipboard.writeText(source) .then(() => { const originalHTML = btn.innerHTML; btn.innerHTML = '<i class="bi bi-check-circle-fill"></i> 复制成功!'; setTimeout(() => btn.innerHTML = originalHTML, 2000); }) .catch(err => console.error('复制失败:', err)); }); }); // 将按钮添加到数据卡片 const dataCard = document.querySelector('.card.mt-3.mb-3'); if (dataCard) { const cardHeader = dataCard.querySelector('.card-header'); if (cardHeader) { // 创建按钮容器 const btnGroup = document.createElement('div'); btnGroup.className = 'd-inline-block float-end'; btnGroup.appendChild(btn); // 插入到标题文字后面 cardHeader.appendChild(btnGroup); } } })();