// ==UserScript==
// @name 课程分数占比查看(中南林)
// @license GNU GPLv3
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 点击蓝色成绩即可进入查看,恢复隐藏的成绩链接并隐藏原始不可点击的成绩
// @match http://jwgl.webvpn.csuft.edu.cn/jsxsd/kscj/*
// @run-at document-end
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
// 主处理函数
const processPage = () => {
// 1. 恢复注释中的成绩链接
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_COMMENT, null, false);
const toRemove = [];
let node;
while ((node = walker.nextNode())) {
let content = node.nodeValue.trim();
if (content.startsWith('
')) {
content = content.replace(/&/g, '&');
const range = document.createRange();
range.setStartAfter(node);
const frag = range.createContextualFragment(content);
node.parentNode.insertBefore(frag, node);
toRemove.push(node);
}
}
toRemove.forEach(n => n.remove());
// 2. 隐藏原始不可点击的成绩
const dataTable = document.getElementById('dataList');
if (!dataTable) return;
const rows = dataTable.rows;
for (let i = 0; i < rows.length; i++) {
const cells = rows[i].cells;
if (cells.length > 5) {
// 隐藏第六列(不可点击的成绩)
cells[5].style.display = 'none';
// 调整第五列(可点击的成绩)的样式
const scoreLink = cells[4].querySelector('a');
if (scoreLink) {
scoreLink.style.display = 'inline-block';
scoreLink.style.verticalAlign = 'middle';
scoreLink.style.lineHeight = 'normal';
}
}
}
};
// 初始执行
processPage();
// 监听动态变化
const observer = new MutationObserver(mutations => {
let needsUpdate = false;
mutations.forEach(mutation => {
if (mutation.addedNodes.length) needsUpdate = true;
});
if (needsUpdate) processPage();
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: false,
characterData: false
});
})();
|