返回首頁 

Greasy Fork is available in English.

组卷网-组卷中心一键清理

[2024.12.01]删除影响阅读的不必要元素,微调样式以方便观看,增加设置功能,能够设置是否保留试卷标题、大题、大题留白高度


Installer dette script?
// ==UserScript==// @name         组卷网-组卷中心一键清理// @namespace    http://tampermonkey.net/// @version      0.30// @description  [2024.12.01]删除影响阅读的不必要元素,微调样式以方便观看,增加设置功能,能够设置是否保留试卷标题、大题、大题留白高度// @author       TheOneAdonis// @match        https://zujuan.xkw.com/zujuan// @grant        GM_setValue// @grant        GM_getValue// @license      MIT// ==/UserScript==(function() {'use strict';let globalSpecialQuestions = {};// 默认设置const defaultSettings = {preservePaperName: false,preserveQuestionTitles: false,specialQuestionPadding: 120};// 获取用户设置function getSettings() {return {preservePaperName: GM_getValue('preservePaperName', defaultSettings.preservePaperName),preserveQuestionTitles: GM_getValue('preserveQuestionTitles', defaultSettings.preserveQuestionTitles),specialQuestionPadding: GM_getValue('specialQuestionPadding', defaultSettings.specialQuestionPadding)};}// 保存用户设置function saveSettings(settings) {GM_setValue('preservePaperName', settings.preservePaperName);GM_setValue('preserveQuestionTitles', settings.preserveQuestionTitles);GM_setValue('specialQuestionPadding', settings.specialQuestionPadding);}// 重置设置function resetSettings() {saveSettings(defaultSettings);return defaultSettings;}// 记录需要留空的题目const recordSpecialQuestions = () => {const specialTypes = ['简答题', '材料题', '综合题', '解答题','辨析题', '计算题', '情境探究题', '分析说明题'];const specialQuestions = {};const quesTypeElements = document.querySelectorAll('.ques-type');quesTypeElements.forEach(element => {const typeName = element.getAttribute('name');if (specialTypes.includes(typeName)) {if (!specialQuestions[typeName]) {specialQuestions[typeName] = [];}const questionBody = element.querySelector('.questype-body');if (questionBody) {const questions = questionBody.querySelectorAll('.ques-item');questions.forEach((question, index) => {const questionNumberElement = question.querySelector('.quesindex');const questionNumber = questionNumberElement? questionNumberElement.textContent.trim(): `未知题号 ${index + 1}`;specialQuestions[typeName].push({questionNumber: questionNumber,index: index + 1,element: question,text: question.textContent.trim()});});}}});globalSpecialQuestions = specialQuestions;console.log('特殊题目记录:', specialQuestions);return specialQuestions;};// 创建设置模态框function createSettingsModal() {const modal = document.createElement('div');modal.style.cssText = `position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 500px;background: white;border-radius: 10px;box-shadow: 0 0 5px gray;border: 2px solid blue;padding: 20px;z-index: 2000;display: none;`;const settings = getSettings();modal.innerHTML = `<h2 style="text-align: center; margin-bottom: 20px;">页面清理设置</h2><div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;"><label>保留试卷名</label><input type="checkbox" id="preservePaperName"${settings.preservePaperName ? 'checked' : ''}></div><div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;"><label>保留题型</label><input type="checkbox" id="preserveQuestionTitles"${settings.preserveQuestionTitles ? 'checked' : ''}></div><div style="margin-bottom: 15px;"><label>大题留白高度:</label><input type="range" id="specialQuestionPadding"min="60" max="240" step="10"value="${settings.specialQuestionPadding}"><span id="paddingValue">${settings.specialQuestionPadding}px</span></div><div style="display: flex; justify-content: space-between;"><button id="saveSettings">保存</button><button id="resetSettings">重置默认</button><button id="closeSettings">取消</button></div>`;document.body.appendChild(modal);// 实时更新留白高度显示const paddingSlider = modal.querySelector('#specialQuestionPadding');const paddingValue = modal.querySelector('#paddingValue');paddingSlider.addEventListener('input', (e) => {paddingValue.textContent = `${e.target.value}px`;});return modal;}// 页面加载完成后立即记录window.addEventListener('load', () => {recordSpecialQuestions();// 清理按钮const cleanButton = document.createElement('button');cleanButton.textContent = '清理';cleanButton.style.cssText = `position: fixed; right: 60px; top: 10px; z-index: 1000;padding: 10px; background-color: #2877ff;color: white; border: none; border-radius: 5px;cursor: pointer; margin-right: 10px;`;// 设置按钮const settingsButton = document.createElement('button');settingsButton.innerHTML = '⚙️';settingsButton.style.cssText = `position: fixed; right: 10px; top: 10px; z-index: 1000;padding: 10px; background-color: #f0f0f0;border: 1px solid #ccc; border-radius: 5px;cursor: pointer;`;const settingsModal = createSettingsModal();// 清理按钮事件cleanButton.addEventListener('click', function() {const settings = getSettings();// 删除元素列表const elementsToDelete = ['body > header','body > div.bread-nav','body > div.fiexd-nav','body > main > aside','body > main > article > div.seal-line','body > main > article > div.paper-main > div.paper-body > div:nth-child(1) > div.part-head','#part-head-box2','body > main > article > div.paper-main > div.deleted-box','body > div.footer','#pui_studentinput',document.querySelector("#pui_studentinput") // 新增的元素选择器];// 删除指定的元素elementsToDelete.forEach(selector => {if (typeof selector === 'string') {const element = document.querySelector(selector);if (element) element.remove();}});// 控制试卷名和标题if (!settings.preservePaperName) {const paperHead = document.querySelector('body > main > article > div.paper-main > div.paper-head');if (paperHead) paperHead.remove();}if (!settings.preserveQuestionTitles) {const questypeHeads = document.querySelectorAll('.questype-head');questypeHeads.forEach(element => element.remove());}// 为部分题型添加底部空白Object.values(globalSpecialQuestions).forEach(typeQuestions => {typeQuestions.forEach(question => {question.element.style.paddingBottom = `${settings.specialQuestionPadding}px`;});});// 设置字体大小和页面样式document.querySelectorAll('*').forEach(el => {// 查找试卷标题const excludeElement = document.querySelector('body > main > article > div > div.paper-head > div.paper-title > #pui_maintitle');// 跳过试卷标题if (el === excludeElement) {return;}// 设置字体大小为 14pxel.style.fontSize = '14px';// 如果当前元素不是 <body> 下的 <main> 元素,则设置外边距为 0pxif (el !== document.querySelector('body > main')) {el.style.margin = '0px';}});const paperCnt = document.querySelector('.paper-cnt.clearfix');if (paperCnt) paperCnt.style.maxWidth = '100%';const quesItems = document.querySelectorAll('.ques-item');quesItems.forEach(item => {item.style.paddingTop = '0';if (!item.style.paddingBottom || item.style.paddingBottom === '') {item.style.paddingBottom = '0';}});// 清理按钮和设置按钮都消失cleanButton.remove();settingsButton.remove();});// 设置按钮事件settingsButton.addEventListener('click', () => {settingsModal.style.display = 'block';});// 保存设置settingsModal.querySelector('#saveSettings').addEventListener('click', () => {const newSettings = {preservePaperName: document.getElementById('preservePaperName').checked,preserveQuestionTitles: document.getElementById('preserveQuestionTitles').checked,specialQuestionPadding: parseInt(document.getElementById('specialQuestionPadding').value)};saveSettings(newSettings);settingsModal.style.display = 'none';});// 重置设置settingsModal.querySelector('#resetSettings').addEventListener('click', () => {settingsModal.style.display = 'none';const resetSettings = resetSettings();document.getElementById('preservePaperName').checked = resetSettings.preservePaperName;document.getElementById('preserveQuestionTitles').checked = resetSettings.preserveQuestionTitles;document.getElementById('specialQuestionPadding').value = resetSettings.specialQuestionPadding;});// 关闭设置框settingsModal.querySelector('#closeSettings').addEventListener('click', () => {settingsModal.style.display = 'none';});document.body.appendChild(cleanButton);document.body.appendChild(settingsButton);});})();