Greasy Fork

Greasy Fork is available in English.

隱藏特定學校文章 - Dcard

在 Dcard 隱藏來自特定學校的文章

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         隱藏特定學校文章 - Dcard
// @name:en      Hide Specific School Posts - Dcard
// @description  在 Dcard 隱藏來自特定學校的文章
// @description:en This script hides posts from specific schools on Dcard.
// @namespace    http://tampermonkey.net/
// @version      0.4.4
// @match        https://www.dcard.tw/*
// @grant        none
// @author       Franky
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // 設定要屏蔽的學校名稱
    const blockedSchools = [
        "國立清華大學",
        "國立中正大學",
        "玄奘大學",
        "國立空中大學",
        "臺北醫學大學 醫學系"
    ];

    // 改進:使用正則表達式來處理學校名稱,忽略可能的空格或大小寫差異
    function matchSchool(schoolName) {
        return blockedSchools.some(blockedSchool =>
            new RegExp(`^${blockedSchool}$`, 'i').test(schoolName)
        );
    }

    // 隱藏文章的功能
    function hideBlockedSchoolPosts() {
        // 隱藏主頁文章
        const articles = document.querySelectorAll("article");
        articles.forEach(article => {
            const schoolElement = article.querySelector(".d_xa_2b.d_tx_2c.d_lc_1u.ljv2to8");
            if (schoolElement) {
                const schoolName = schoolElement.textContent.trim();
                if (matchSchool(schoolName)) {
                    article.style.display = "none";
                }
            }
        });

        // 隱藏列表中的特定文章
        const listArticles = document.querySelectorAll("div[role=article]");
        listArticles.forEach(article => {
            const schoolElement = article.querySelector(".d_xa_2b.d_tx_2c.d_lc_1u.ljv2to8");
            if (schoolElement) {
                const schoolName = schoolElement.textContent.trim();
                if (matchSchool(schoolName)) {
                    article.style.display = "none";
                }
            }
        });
    }

    // 初始化監聽器
    function initObserver() {
        if (window.articleObserver) {
            window.articleObserver.disconnect();
        }

        hideBlockedSchoolPosts();

        const observer = new MutationObserver(hideBlockedSchoolPosts);
        observer.observe(document.body, { childList: true, subtree: true });
        window.articleObserver = observer;
    }

    // 初次執行與設定觀察器
    initObserver();

    // 監測 URL 變化以處理單頁應用
    let lastPathname = location.pathname;
    setInterval(() => {
        if (location.pathname !== lastPathname) {
            lastPathname = location.pathname;
            initObserver();
        }
    }, 1000);
})();