我目前正在为Greasemonkey编写这个脚本。此脚本的目标是从MeetMe.com网站的Feed中删除特定用户的帖子 我的代码是:
// ==UserScript==
// @name PostBeGone
// @namespace TestingNameSpace
// @include http://www.meetme.com/apps/home
// @version 1
// ==/UserScript==
var posterId;
var blacklist = new Array();
var toDelete;
blacklist [0] = 45112400; //These are just random peoples' user Id's that I am
blacklist [1] = 9649820; //using to test this script
blacklist [2] = 55907221;
blacklist [3] = 56788411;
window.onload = function checkAndRemove () {
var children = document.getElementById('feedReloadArea').childnodes;
alert(children); //alert says "undefined"
i = 0;
While (i < children.length)
{
posterId = children[i].getAttribute('data-poster');
toDelete = null;
i2 = 0;
while (i2 < blacklist.length)
{
if (posterId == blacklist[i2])
{
toDelete = children[i];
break;
}
i2++;
}
if (toDelete != null)
{
toDelete.parentNode.removeChild(toDelete);
}
i++;
}
}
使用具有多个执行的各种警报,我知道代码执行到alert(children)
,即返回undefined
。
在我的脚本中有window.onload =
之前,在搜索Google和本网站寻求答案时,我读了很多地方,问题可能是脚本在页面加载之前尝试执行,所以我添加了window.onload =
。然而,问题仍然存在,我找不到任何与我相似的问题来理解它。
要查看元素的html代码,我一直在使用Firefox的“Inspect Element”功能。页面上可能有用的html代码片段是:
<div id="feedReloadArea" style="display: block;">
<div class="feedItemArea feedSpotlightHighlight" data-comment-maintenance="0" data-created-at="1360098729.05091" data-numeric-reference-id="" data-reference-uuid="0d76957f-2f64-4654-99ea-f67974116b32" data-entity="StatusUpdate" data-poster="59538173" data-uuid="b9e85465-5b91-4b5c-a443-c4e37d716481"></div><div class="feedItemArea" data-comment-maintenance="0" data-created-at="1360103761.624714" data-numeric-reference-id="" data-reference-uuid="c2c201ca-a391-4fff-aec2-9823a3e90815" data-entity="StatusUpdate" data-poster="45508368" data-uuid="11149a32-38cf-4919-b081-0bd39bdc49eb"></div>
<div class="feedItemArea" data-comment-maintenance="0" data-created-at="1360103737.756343" data-numeric-reference-id="" data-reference-uuid="997824a2-994c-467f-bfbe-aa4beb1e402f" data-entity="StatusUpdate" data-poster="38033716" data-uuid="bc075882-771c-4ee2-ad28-dbf21fbf3bd3"></div>
澄清一下,这只是HTML代码的一部分。 Feed中有许多类,因为每个类代表一个用户的帖子。此外,每个类都有多个,例如用户的链接和用户的个人资料图片。但是,我想要删除与黑名单中任何一个相同的海报ID的完整feedItemArea类。
我希望我能够清晰简洁地提供帮助,但如果需要任何其他信息以便帮助我,请告诉我,我会发布。我的问题是children
导致undefined
的原因是什么?提前谢谢。
答案 0 :(得分:1)
JavaScript区分大小写,而childNodes
代替childnodes
。顺便说一下,既然您可能只想迭代元素节点(没有文本节点,注释等),请使用children
collection。此外,您几乎不需要window.onload
,因为默认情况下会执行GreaseMonkey脚本on DOMready。
答案 1 :(得分:1)
大写!
var children = document.getElementById('feedReloadArea').childnNodes;