您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在简道云列表页面显示并复制表格行的data-row-id和data-index值
// ==UserScript== // @name 简道云表格数据提取 // @namespace http://tampermonkey.net/ // @version 1.2 // @description 在简道云列表页面显示并复制表格行的data-row-id和data-index值 // @author You // @match *://*.jiandaoyun.com/* // @grant GM_addStyle // @grant GM_setClipboard // @license MIT // ==/UserScript== (function() { 'use strict'; // 添加自定义右键菜单样式 GM_addStyle(` .custom-context-menu { position: absolute; background: white; border: 1px solid #ccc; box-shadow: 2px 2px 5px rgba(0,0,0,0.2); z-index: 99999; min-width: 200px; max-height: 600px; overflow-y: auto; } .menu-item { padding: 8px 12px; cursor: pointer; border-bottom: 1px solid #eee; } .menu-item:hover { background-color: #f5f5f5; } .copy-hint { position: fixed; top: 10px; right: 10px; background: #4CAF50; color: white; padding: 8px 16px; border-radius: 4px; display: none; z-index: 100000; } `); // 创建提示元素 const hint = document.createElement('div'); hint.className = 'copy-hint'; document.body.appendChild(hint); // 获取列标题 function getColumnTitles() { return Array.from(document.querySelectorAll('tr.table-header-row th')) .map(th => { const titleElement = th.querySelector('.title-text'); return titleElement ? titleElement.textContent.trim() : ''; }) .filter(title => title); } // 显示提示信息 function showHint(message) { hint.textContent = message; hint.style.display = 'block'; setTimeout(() => { hint.style.display = 'none'; }, 2000); } // 创建右键菜单 function createContextMenu(data, columns) { const oldMenu = document.querySelector('.custom-context-menu'); if (oldMenu) oldMenu.remove(); const menu = document.createElement('div'); menu.className = 'custom-context-menu'; const rowIdItem = document.createElement('div'); rowIdItem.className = 'menu-item'; rowIdItem.innerHTML = `<strong>data-row-id:</strong> ${data.rowId}`; rowIdItem.onclick = () => { GM_setClipboard(data.rowId); showHint('已复制 data-row-id'); }; menu.appendChild(rowIdItem); data.indices.forEach((value, index) => { if (!value) return; const menuItem = document.createElement('div'); menuItem.className = 'menu-item'; const columnName = columns[index] || `列${index + 1}`; menuItem.innerHTML = `<strong>${columnName}:</strong> ${value}`; menuItem.onclick = () => { GM_setClipboard(value); showHint(`已复制 ${columnName}`); }; menu.appendChild(menuItem); }); return menu; } // 右键点击处理 document.addEventListener('contextmenu', function(event) { const targetRow = event.target.closest('tr.table-row'); if (!targetRow) return; event.preventDefault(); const columns = getColumnTitles(); const data = { rowId: targetRow.dataset.rowId, indices: Array.from(targetRow.querySelectorAll('td:not(:first-child)')) .map(td => td.dataset.index || '') }; const menu = createContextMenu(data, columns); document.body.appendChild(menu); const viewportWidth = window.innerWidth; const viewportHeight = window.innerHeight; let left = event.pageX; let top = event.pageY; if (left + menu.offsetWidth > viewportWidth) { left = viewportWidth - menu.offsetWidth; } if (top + menu.offsetHeight > viewportHeight) { top = viewportHeight - menu.offsetHeight; } menu.style.left = left + 'px'; menu.style.top = top + 'px'; }); // 点击其他地方关闭菜单 document.addEventListener('click', function(e) { if (!e.target.closest('.custom-context-menu')) { const menu = document.querySelector('.custom-context-menu'); if (menu) menu.remove(); } }); })();