您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows you hide a thread on the Bogleheads front page by clicking an "x" button that appears on rollover of the right side of each row
// ==UserScript== // @name Hide Threads on Bogleheads front page // @namespace https://www.bogleheads.org/ // @version 0.1 // @description Allows you hide a thread on the Bogleheads front page by clicking an "x" button that appears on rollover of the right side of each row // @author ChatGPT // @match https://www.bogleheads.org/* // @exclude https://www.bogleheads.org/forum/* // @exclude https://www.bogleheads.org/wiki/* // @exclude https://www.bogleheads.org/blog/* // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; // Select the table with the ID of posts_table const table = document.getElementById("posts_table"); if (!table) { return; } // Select all rows in the main thread list const rows = table.querySelectorAll("tbody tr"); // Load the list of hidden thread titles from local storage const hiddenThreadTitles = JSON.parse(localStorage.getItem("hiddenThreadTitles") || "{}"); // Iterate over each row for (let i = 0; i < rows.length; i++) { const row = rows[i]; // ignore header rows by skipping rows with less than 5 td elements if (row.getElementsByTagName("td").length < 5) { continue; } // Select the first link in the row const link = row.querySelector("td a"); if (!link) { continue; } // Get the text of the link const title = link.innerHTML; // If the link text is in the list of hidden thread titles, hide the row if (hiddenThreadTitles[title]) { row.style.display = "none"; } // Create a span element to hold the button const span = document.createElement("span"); span.style.float = "right"; span.style.marginTop = "-0.5em"; span.style.opacity = "0"; span.style.display = "inline-block"; // Create a button element const button = document.createElement("button"); button.innerHTML = "×"; button.style.background = "none"; button.style.border = "none"; button.style.cursor = "pointer"; button.style.fontSize = "smaller"; button.style.height = "1em"; button.style.lineHeight = "1em"; button.style.width = "1em"; button.style.position = "relative"; button.style.top = "5px"; // Add the button to the span span.appendChild(button); // Add the span to the row row.appendChild(span); // Attach a hover event listener to the span span.addEventListener("mouseover", function() { // When the span is hovered over, show the button span.style.opacity = "1"; }); span.addEventListener("mouseout", function() { // When the mouse moves out of the span, hide the button span.style.opacity = "0"; }); // Attach a click event listener to the button button.addEventListener("click", function() { // When the button is clicked, hide the row row.style.display = "none"; // Add the title of the hidden thread to the list of hidden thread titles hiddenThreadTitles[title] = true; // Store the list of hidden thread titles in local storage localStorage.setItem("hiddenThreadTitles", JSON.stringify(hiddenThreadTitles)); }); button.addEventListener("mouseenter", function() { row.style.backgroundColor = "#f2f2f2"; }); button.addEventListener("mouseleave", function() { row.style.backgroundColor = ""; }); } })();