firefox - 使用 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));
}
解决方案
试试下面的代码,用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。
推荐阅读
- arrays - 查找其值接近另一个向量的元素的向量位置
- php - Laravel groupBy 和原始查询
- python - Python isinstance 不适用于 if 语句。
- html - 将 CSS 格式应用于 font-weight:bold 的每个实例
- java - 将字符串映射到枚举 jooq
- r - 使用 R 从 post API 下载文件
- ms-access - vba访问查询错误
- python - 无法使用 Keras fit_generator 重现结果
- reactjs - 即使已定义,也无法读取未定义的属性“setState”
- sql - SQL Server:从每年中选择前 10 名总和