网页表格复制器

网页表格复制脚本

目前為 2023-11-30 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         网页表格复制器
// @namespace    http://tampermonkey.net/
// @version      0.231130.1
// @description  网页表格复制脚本
// @author       N-cat
// @match        *://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// ==/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(){
        // 鼠标悬浮在td上时提示
        var tds = document.querySelectorAll('td');
        console.log(tds);
        for(let i of tds){
            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;
            var width = endX - startX;
            var height = endY - startY;
            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 + width && startY <= tdtop + height && endX >= tdleft && endY >= tdtop) {
                    // 将tr元素的背景色设置为黑色(或其他你想要的颜色)
                    i.style.backgroundColor = 'black';
                }
            }
        });
        window.addEventListener("mouseon", function(e){
            startX = 9999; // 按下坐标
            startY = 9999;
            endX = 9999; // 鼠标坐标
            endY = 9999;
            for(let i of tds){
                i.style.removeProperty("background-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("网页表格复制器开启成功");
    }
})();