您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在购买心得 Chinaplay 板块的帖子一楼开始位置添加折扣表格,折后价和史低可排序。
当前为
// ==UserScript== // @name Keylol Chinaplay Table // @namespace https://greasyfork.org/users/34380 // @version 20231111 // @description 在购买心得 Chinaplay 板块的帖子一楼开始位置添加折扣表格,折后价和史低可排序。 // @match https://keylol.com/* // @grant none // ==/UserScript== (function () { 'use strict'; if (document.querySelector('.subforum_left_title_left_up').innerText.match(/Chinaplay/)) { document.querySelector('head').insertAdjacentHTML('beforeend', `<style> .td-wide-80 { wide:80px; } .td-wide-50 { wide:50px; } </style>`); var floor1 = document.querySelector('.t_f'); var nodes = floor1.childNodes; var trs = []; var i_start = 0; var i_end = 0; var game; var discount = 0; var hist = 0; var region; var date; var code = ''; var link nodes.forEach((node) => { node.childNodes.forEach((_node) => { // console.log(_node); getContent(_node); }); }); console.log(trs); newTable(); function newTable() { var html = `<table id="table-chinaplay" class="t_table"><thead><tr><td>游戏名</td><td class="td-wide-80" data-col="coupon" data-reverse="-1">折后价</td><td class="td-wide-80" data-col="hist" data-reverse="-1">史低</td><td>区域</td><td class="td-wide-50">截止</td><td>折扣码</td><td class="td-wide-50">加购</td></tr></thead><tbody>`; trs.forEach((tds) => { html = html + `<tr><td><a href="${tds[7]}" target="_blank">${tds[0]}</a></td><td data-coupon="${parseFloat(tds[1])}">${tds[1]}元</td><td data-hist="${parseFloat(tds[2])}">${tds[2]}元</td><td>${tds[3]}</td><td>${tds[4]}</td><td>${tds[5]}</td><td><a href="${tds[6]}" target="_blank">加购</a></td></tr>`; }); html = `<div class="sff_collapse"><div class="sff_collapse_b" onclick="var s = this.parentNode; while (!s.classList.contains('sff_collapse')) {s = s.parentNode;} if (s.classList.contains('sff_collapsed')) {s.classList.remove('sff_collapsed');} else {s.classList.add('sff_collapsed');}"><span class="sff_collapse_t">></span> 折扣表格</div><div class="sff_collapse_d"> ${html}</tbody></table> <div><a href="javascript:;" onclick="var s = this.parentNode; while (!s.classList.contains('sff_collapse')) {s = s.parentNode;} s.scrollIntoView(true); if (s.classList.contains('sff_collapsed')) {s.classList.remove('sff_collapsed');} else {s.classList.add('sff_collapsed');}">点击隐藏</a></div></div></div>`; var anchor = floor1.querySelector('.t_f .pstatus') || floor1.querySelector('.original_text_style1'); if (anchor) { anchor.insertAdjacentHTML('afterend', '<br>' + html); } else { floor1.insertAdjacentHTML('afterbegin', html); } } // game discount hist region date code cart link function getContent(node) { if (node.nodeName == 'SPAN' || node.nodeName == 'STRONG') { node.childNodes.forEach((_node) => { // console.log(_node); getContent(_node); }); } else if (node.nodeName == 'H1') { var matched = node.innerText.match(/(\d+(\.\d+)?)(.*)((.*))/); if (matched) { date = matched[1]; region = matched[4]; i_end = trs.length; for (; i_start < i_end; i_start++) { trs[i_start][5] = code; } var matched2 = matched[3].match(/.*《(.*)》/); if (matched2) { game = matched2[1]; } } } else if (node.nodeName == 'A') { if (node.href.match(/https:\/\/store\.steampowered\.com\/app\/\d+\//) || node.href.match(/https:\/\/store\.steampowered\.com\/sub\/\d+\//)) { game = node.innerText; link = node.href.match(/(.*\d+\/)/)[1]; } else if (node.href.match(/https:\/\/chinaplay\.store\/detail\/\S+\//)) { console.log(node); var cart = node.href.match(/https:\/\/chinaplay\.store\/detail\/\S+\//)[0]; trs.push([game, discount, hist, region, date, code, cart, link]); hist = 0; } } else if (node.nodeName == '#text') { var content = node.textContent; if (content.match(/史低:?(\d+(\.\d+)?)/)) { hist = content.match(/史低:?(\d+(\.\d+)?)/)[1]; } else if (content.match(/(\d+(\.\d+)?)元/)) { discount = content.match(/(\d+(\.\d+)?)元/)[1]; } else if (content.match(/折扣码:/)) { code = node.parentNode.innerText.match(/折扣码:(\S+)/)[1]; } } } var tbody = document.querySelector('#table-chinaplay > tbody'); document.querySelector('#table-chinaplay > thead > tr').addEventListener('click', function (event) { const target = event.target; if (target.nodeName == 'TD' && target.hasAttribute('data-reverse')) { const col = target.getAttribute('data-col'); let reverse = target.getAttribute('data-reverse'); let sorted; if (reverse == 0) { sorted = Array.from(tbody.querySelectorAll('tr')).sort((a, b) => { return b.querySelector('td[data-' + col + ']').getAttribute('data-' + col) - a.querySelector('td[data-' + col + ']').getAttribute('data-' + col); }); const siblings = this.querySelectorAll('[data-reverse="1"]'); target.setAttribute('data-reverse', '1'); siblings.forEach((node) => { node.setAttribute('data-reverse', '0'); }); } else { sorted = Array.from(tbody.querySelectorAll('tr')).sort((a, b) => { return a.querySelector('td[data-' + col + ']').getAttribute('data-' + col) - b.querySelector('td[data-' + col + ']').getAttribute('data-' + col); }); const siblings = this.querySelectorAll('[data-reverse="0"]'); target.setAttribute('data-reverse', '0'); siblings.forEach((node) => { node.setAttribute('data-reverse', '1'); }); } sorted.forEach((node) => { tbody.insertAdjacentElement('beforeend', node); }); } }); } })();