屏蔽热搜 - 百度、微博、B站

去除 屏蔽 百度、微博、B站等3个平台的热搜热榜

// ==UserScript==
// @name 屏蔽热搜 - 百度、微博、B站
// @namespace NoHotSearch
// @description 去除 屏蔽 百度、微博、B站等3个平台的热搜热榜
// @match *://*.weibo.com/*
// @match *://*.baidu.com/*
// @match *://*.bilibili.com/*
// @version 1.2.0
// @run-at document-end
// @license MIT
// ==/UserScript==
//编写水平有限!


(function() {
    'use strict';
    // Your code here...


    // 获取当前页面的 URL
    const currentUrl = window.location.href;
    // console.log(currentUrl);



    function selectDom(query) {
        return document.querySelector(query);
    }

    function hiddenDom(dom) {
        dom.style.display = 'none'
    }

    // ========================= B站热搜 √ =========================
    // 隐藏搜索框文字和热搜面板
    if (currentUrl.includes("bilibili.com")) {
        const bilibiliObserver = new MutationObserver((mutationsList) => {
            for (const mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    // 检查是否有新的节点插入
                    mutation.addedNodes.forEach((node) => {
                        //先检查是不是元素节点
                        if (node.nodeType === Node.ELEMENT_NODE) {
                            // console.log('childList', node);
                            if (node.classList.contains('trending') && node.style.display !== 'none') {
                                // console.log('隐藏热搜');
                                hiddenDom(node);
                            } else if (node.classList.contains('sticky') && node.style.display !== 'none') {
                                // console.log('隐藏话题');
                                hiddenDom(node);
                            }
                        }
                    });
                } else if (mutation.type === 'attributes') {
                    const mutationElement = mutation.target
                    // console.log('attributes', mutation);
                    if (mutationElement.className === 'nav-search-input' || mutationElement.className === 'v-middle nav-search-content') { // 第二个是直播页的搜索框
                        if (mutationElement.placeholder !== " ") {
                            // console.log('隐藏搜索框文字');
                            mutationElement.setAttribute("placeholder"," ")
                        }
                    }

                    // console.log(mutation);
                }
            }
        });
        bilibiliObserver.observe(document.body, { childList: true, subtree: true, attributes: true });
    }
    // ========================= 微博热搜 √ =========================
    if (currentUrl.includes("weibo.com")) {
        // 隐藏主页和搜索页右侧热搜
        const weiboSearchResult = selectDom('#hot-band-container');
        if (weiboSearchResult) {
            hiddenDom(weiboSearchResult);
        }
        const weiboObserver = new MutationObserver((mutationsList) => {
            for (const mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    // 隐藏搜索页右侧热搜
                    const weiboSearchResult = selectDom('#hot-band-container');
                    if (weiboSearchResult && weiboSearchResult.style.display !== 'none') {
                        hiddenDom(weiboSearchResult);
                    }
                    // 检查是否有新的节点插入
                    mutation.addedNodes.forEach((node) => {
                        //先检查是不是元素节点
                        if (node.nodeType === Node.ELEMENT_NODE) {
                            // console.log('childList', node);
                            if (node.classList.contains('hotBand') && node.style.display !== 'none') {
                                // console.log('隐藏主页右侧热搜');
                                hiddenDom(node);
                            }
                        }
                    });
                }
            }
        });
        weiboObserver.observe(document.body, { childList: true, subtree: true });
    }

    // ========================= 百度热搜 √ =========================
    if (currentUrl.includes('baidu.com')) {
        const homeSearch = selectDom('.s-hotsearch-wrapper');
        if (homeSearch) {
            hiddenDom(homeSearch);
        }
        const resultSearch = selectDom('#content_right');
        if (resultSearch) {
            hiddenDom(resultSearch);
        }

        // 隐藏主页和搜索结果页热搜
        const baiduObserver = new MutationObserver((mutationsList) => {
            for (const mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    const homeSearch = selectDom('.s-hotsearch-wrapper');
                    if (homeSearch && homeSearch.style.display !== 'none') {
                        hiddenDom(homeSearch);
                    }
                    const resultSearch = selectDom('#content_right');
                    if (resultSearch && resultSearch.style.display !== 'none') {
                        hiddenDom(resultSearch);
                    }
                }
            }
        });
        baiduObserver.observe(document.body, { childList: true, subtree: true});
    }


    // 等待 DOM 加载完成
    // window.addEventListener('load', function() {
    //     hiddenDom(selectDom('.topic-panel'))
    // });
})();



/*
2023-1-3 13:44: - 2023-1-4 23:55:
屏蔽网页元素的方法
1. 利用 style="display:none;" 隐藏元素
2. 利用.setAttribute(“属性名称”,“修改后的属性值”)修改属性值的方式(主要用于屏蔽搜索框预写入文字)
3. 利用parenttElement.removeChild(childtElement)移除指定元素
4. 利用.innerHTML = ""将元素的所有子级元素清空
5. 利用.remove()直接移除元素
由于用(3)(4)(5)直接移除元素会导致各种问题(莫名其妙的报错,屏蔽元素后面的所有元素都被隐藏,或引起指定场景下莫名其妙的元素消失)
但是(1)不但没有这些问题,而且就算开着脚本也不影响调试,因此利用(1)隐藏元素的方式最为温柔,稳定性最高




常用元素定位方法


.getElementById("")
.getElementsByClassName("")
.getElementsByTagName("")


.parentElement  ——获取父级元素
.parentNode  ——获取父级节点
.childNodes  ——获取子级节点
.firstChild  ——获取首个子节点
.lastChild  ——获取末尾子节点




常用方法
.style.display = 'none'  ——隐藏元素
.setAttribute("属性名","属性值")  ——设置元素属性值 <div 属性名=“属性值”></div>
.getAttribute('属性名')  ——根据属性名获取属性值
.innerHTML  ——获取或修改元素值 <div>元素值</div>
*/