// ==UserScript== // @name 起点小说移动端过滤 // @version 1.0 // @description 不显示不感兴趣的小说 // @author MoYu // @match https://m.qidian.com/rank/** // @require https://code.jquery.com/jquery-3.6.0.min.js // @icon https://www.google.com/s2/favicons?domain=v2ex.com // @grant GM_log // @grant unsafeWindow // ==/UserScript== (function () { "use strict"; // Your code here... const KEY = "filterd-articles"; function getFilteredArticles() { let filtered = window.localStorage.getItem(KEY); if (filtered) { console.log("filtered", filtered); return JSON.parse(filtered); } else { return []; } } const filteredArticles = getFilteredArticles(); function createButton(articleTitle) { return ( '<button type="button" class="not_interested" data-name="' + articleTitle + '">不感兴趣</button>' ); } function filterArticles() { let articlesRoot = $(".book-ol-rank"); let articles = articlesRoot.find("li"); articles.each((i, e) => { let ele = $(e); let articleTitle = ele.find(".book-title")[0].innerHTML; console.log(articleTitle); if (articleTitle) { if ($.inArray(articleTitle, filteredArticles) >= 0) { ele.remove(); } else { if (ele.find("button").length === 0) { ele.find(".book-author").append(createButton(articleTitle)); } } } }) } $(document).ready(function () { filterArticles(); const targetNode = document.getElementsByClassName("book-ol-rank")[0]; const config = { attributes: false, childList: true, subtree: true }; const callback = function(mutationsList, observer) { if (mutationsList.some((mutation) => mutation.type === 'childList')) { filterArticles(); } }; const observer = new MutationObserver(callback); observer.observe(targetNode, config); $(document).on("click", ".not_interested", function (event) { event.preventDefault(); let articleTitle = $(this).attr("data-name"); console.log(articleTitle); filteredArticles.push(articleTitle); window.localStorage.setItem(KEY, JSON.stringify(filteredArticles)); console.log($(this).parents("li")); $(this).parents("li").remove(); }); }); })();
Note.ms
/mqidianpibi