当前位置: 首页 > article >正文

网页表格复制器(油猴插件脚本)

网页表格复制器(油猴插件脚本)

测试表格

Column 1Column 2Column 3Column 4
文本居中文本居右文本居左默认
test1-1test1-2test1-3test1-4
test2-1test2-2test2-3test2-4

脚本代码

// ==UserScript==
// @name         网页表格复制器
// @namespace    http://tampermonkey.net/
// @version      0.231130.2
// @description  网页表格复制脚本
// @author       N-cat
// @match        *://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @downloadURL https://update.greasyfork.org/scripts/481068/%E7%BD%91%E9%A1%B5%E8%A1%A8%E6%A0%BC%E5%A4%8D%E5%88%B6%E5%99%A8.user.js
// @updateURL https://update.greasyfork.org/scripts/481068/%E7%BD%91%E9%A1%B5%E8%A1%A8%E6%A0%BC%E5%A4%8D%E5%88%B6%E5%99%A8.meta.js
// ==/UserScript==

(function() {
    'use strict';
    // 样式添加
    const style = `<style>
    .get{
        position:fixed;
        right:80px;
        bottom:150px;
        background-color:#00a1d6;
        color:white;
        height:50px;
        width:50px;
        border-radius: 10px;
        font-size:15px;
        border:solid 3px #FA5A57;
        cursor:pointer;
        outline: none;
        z-index: 999;
    }
    .alertMessage{
        position: fixed;
		top: 30px;
		left: 40%;
		right: 40%;
		padding: 20px 30px;
		background: rgba(0, 0, 0, 0.8);
		color: #ffffff;
		font-size: 20px;
		text-align: center;
		z-index: 999;
		display: none;
        border-radius:5px;
    }
    </style>`;
    let div = document.createElement("div");
    div.innerHTML += style;
    document.body.append(div);
    // 提示框
    var alertMessage = document.createElement("div");
    alertMessage.classList.add('alertMessage');
    document.body.append(alertMessage);
    function alertmess(mess) {
		alertMessage.innerHTML = mess; // 填入要显示的文字
		alertMessage.style.display = "inline"; // 显示弹框
		setTimeout(function () { // 倒计时
			alertMessage.innerHTML = ''; // 清空文本
			alertMessage.style.display = "none" // 隐藏弹框
		}, 3000); // 3秒
	}
    // 获取按钮
    var get = document.createElement("input");
    get.setAttribute("type", "button");
    get.setAttribute("value", "触发");
    get.classList.add('get');
    document.body.append(get);
    // 获取table标签
    var getnum = 0 // 0:未(取消)触发 1:已触发
    let startX = 9999; // 按下坐标
    let startY = 9999;
    let endX = 9999; // 鼠标坐标
    let endY = 9999;
    get.onclick = function(){
        var tds = document.querySelectorAll('td');
        console.log(tds);
        for(let i of tds){
            // 文本设置无法选中
            i.style.userSelect = "none";
            // 鼠标悬浮在td上时提示
            i.addEventListener("mousemove", function(){
                i.style.backgroundColor = 'black';
                i.style.color = 'white';
                for(let j of i.children){
                    j.style.color = 'white';
                }
            });
            i.addEventListener("mouseout", function(){
                i.style.removeProperty("background-color");
                i.style.removeProperty("color");
                for(let j of i.children){
                    j.style.removeProperty("color");
                }
            });
        }
        // 框选变色(还未添加复制功能)
        window.addEventListener("mousedown", function(e){
            startX = e.clientX;
            startY = e.clientY;
        });
        window.addEventListener("mousemove", function(e){
            endX = e.clientX;
            endY = e.clientY;
            for(let i of tds){
                // 获取tr元素的左上角坐标和宽度、高度
                var rect = i.getBoundingClientRect();
                var tdleft = rect.left;
                var tdtop = rect.top;
                var tdwidth = rect.width;
                var tdheight = rect.height;
                console.log("起止坐标", startX, endX, startY, endY);
                // console.log("td坐标", tdleft, tdtop);
                if (startX <= tdleft + tdwidth && startY <= tdtop + tdheight && endX >= tdleft && endY >= tdtop) {
                    // 将tr元素的背景色设置为黑色(或其他你想要的颜色)
                    i.style.backgroundColor = 'black';
                    i.style.color = 'white';
                } else if (startX !== 9999){
                    i.style.removeProperty("background-color");
                    i.style.removeProperty("color");
                }
            }
        });
        // 抬起鼠标重置
        window.addEventListener("mouseup", function(e){
            startX = 9999; // 按下坐标
            startY = 9999;
            endX = 9999; // 鼠标坐标
            endY = 9999;
            for(let i of tds){
                i.style.removeProperty("background-color");
                i.style.removeProperty("color");
            }
        });
        // 点击复制全部execl(基础适配)
        var tables = document.getElementsByTagName("table");
        for(let i of tables){
            i.addEventListener("mousedown", function(){
                var execl = []
                var trs = i.getElementsByTagName("tr");
                for(let j of trs){
                    var row = []
                    var tds = j.getElementsByTagName("td");
                    for(let k of tds){
                        if(k.style.display !== "none"){
                            row.push(k.innerText);
                        }
                    }
                    execl.push(row);
                }
                console.log(execl);
                var csv = ""
                for(let i of execl){
                    for(let j of i){
                        csv = csv + '"' + "'" + j + '"\t';
                    }
                    csv = csv.slice(0,-1) + "\n";
                }
                console.log(csv);
                // 复制视频名称到剪切板
                const textarea = document.createElement('textarea');
                document.body.appendChild(textarea);
                textarea.innerHTML = csv;
                textarea.select(); // 选取文本域的内容
                if (document.execCommand('copy')) {
                    document.execCommand('copy');
                    alertmess("网页表格已复制到剪切板");
                }
                document.body.removeChild(textarea);
            });
        }
        alertmess("网页表格复制器开启成功");
    }
})();

http://www.kler.cn/news/155594.html

相关文章:

  • 飞天使-elk搭建补充
  • ubuntu下快速搭建docker环境训练yolov5数据集
  • 【栈和队列(2)】
  • 破解app思路
  • 数据结构和算法-哈夫曼树以相关代码实现
  • 软件工程单选多选补充
  • 运维 | 关于IP网络相关的概念和原理
  • 第16届中国R会议暨2023X-AGI大会开幕,和鲸科技分享ModelOps在数据科学平台中的实践与应用
  • QT Day01 qt概述,创建项目,窗口属性,按钮,信号与槽
  • ES6 Promise的用法,async/await异步处理同步化
  • JOSEF电流继电器 DL-33 整定范围0.5-2A 柜内安装板前接线
  • CAP BASE理论
  • Fisher信息理论与应用
  • 速速收藏!纯C实现的MD5哈希校验算法~!
  • VSCode修改C++版本
  • LoRaWAN协议栈LoRaMac-Node版本变迁历史(最新4.7.0)
  • 【计算机网络学习之路】URL概念及组成
  • 产品学习之路(一)
  • Leetcode 2954. Count the Number of Infection Sequences
  • 上门按摩APP小程序,抓住机遇创新服务新模式;
  • c语言常见面试题(持续更新)
  • LeetCode | 二叉树的前中后序遍历
  • C语言练习题
  • Bootstrap 5 中文文档 (简体中文)
  • JUC-AQS
  • 如何在 vue 项目中创建 svg 组件
  • 国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新
  • 【代码随想录算法训练营-第二天】【数组】977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
  • Vue中mvvm的作用
  • SpringCloudAlibaba微服务 【实用篇】| Nacos配置管理