场景:编写一个 Greasemonkey 脚本,在 BBC 体育直播报道中隐藏 Twitter 评论(由类“class-TWEET”的列表元素表示)。
使用waitForKeyElements,我设法得到了一些大致有效的东西(下面的警告):
// ==UserScript==
// @name myName
// @namespace none
// @description myDescription
// @include http://www.bbc.co.uk/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @version 2.0
// @grant none
// ==/UserScript==
function doHousekeeping(jNode) {
//Find all tweet items within the commentary, and hide them
var snapResults = document.evaluate(".//div[@id='live-event-text-commentary']/ol/li[contains(@class,'class-TWEET')]", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = snapResults.snapshotLength - 1; i >= 0; i--) {
snapResults.snapshotItem(i).style.display="none";
}
}
// Cleanup on initial load
doHousekeeping();
// Repeat cleanup whenever the main body changes
waitForKeyElements ("#live-event-text-commentary", doHousekeeping);
问题:当页面刷新时,doHousekeeping确实执行(并隐藏了大部分有问题的项目);但是,少数最近的违规项目仍保留在页面顶部。
为什么它不能隐藏所有这些?我的怀疑是,当正文发生变化时,文档/快照没有被刷新。我也是 jQuery 的新手,所以我知道我的家务功能既老派又不理想;任何对更清洁、功能齐全的实施的帮助将不胜感激。