首页 > 解决方案 > 使用 Tampermonkey 显示 Wikipedia 页面

问题描述

在维基百科页面的末尾,有参考链接。我试图不显示参考列表,当单击参考链接的标题时会切换列表,例如“进一步阅读”、“注释”、“参考”等。每个参考列表都有类名“reflist”。我遇到的问题是,当我尝试在标题后找到带有 reflist 类的 div 时,

if (div.className == 'reflist')声明不起作用。可能出了什么问题?

我写了以下代码。问题是当我单击“进一步阅读”时,“参考”的“重新列表”被切换。单击“参考”也会切换相同的“重新列表”。顺便说一句,我不是专业程序员...

if (document.getElementsByClassName("reflist")) {
    let x = document.getElementsByClassName("reflist");
    for (let i = 0; i < x.length; i++) {
        x[i].style.display = "none";
    }
}
function toggle(element) {
    element.style.display = element.style.display == "none" ? "block" : "none";
}
// furtherReading is <span> element.
var furtherReading = document.getElementById("Further_reading");
// parentElement is <h2> element
furtherReading.parentElement.style.background = '#f8f9fa';
furtherReading.parentNode.style.borderBottom = 'none';
furtherReading.style.cursor = "pointer";
var references = document.getElementById("References");
references.parentElement.style.background = '#f8f9fa';
references.parentElement.style.borderBottom = 'none';
references.style.cursor = "pointer";

if (furtherReading) {
    /* There may be other 'style' or 'div' elements before 'div' having className 'reflist' */
    let a = furtherReading.parentElement.nextElementSibling;
    while (a) {
        if (a.className == 'reflist') {
            break;
        } else
            a = a.nextElementSibling;
    }
    furtherReading.addEventListener("click", toggle.bind(null, a));
}

if (references) {
    let b = references.parentElement.nextElementSibling;
    while (b) {
        if (b.className == 'reflist') {
            break;
        } else
            b = b.nextElementSibling;
    }
    references.addEventListener("click", toggle.bind(null, b));
}

标签: firefoxwikipediatampermonkey

解决方案


试试下面的代码,用https://en.wikipedia.org/wiki/Perast测试

// ==UserScript==
// @name         Toggle Wikipedia Reference
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Toggle Wikipedia Reference
// @author       Ynjxsjmh
// @match        *://*.wikipedia.org/wiki/*
// @grant        none
// ==/UserScript==


(function() {
    'use strict';
    var reflist = document.getElementsByClassName("reflist")[0];
    var reference = document.getElementById("References");
    console.log("Toggle Wikipedia Reference");
    reflist.style.display = "none";
    console.log(reference);
    reference.addEventListener("click", toggleReference.bind(null, reflist));

    function toggleReference(element) {
       element.style.display = element.style.display == "none" ? "block" : "none";
    }
})();

问题是您应该手动获取 div,因为没有人帮助您遍历 div。


推荐阅读