嘿伙计们,我正在通过开发greasemonkey脚本来练习我的Javascript编程,理论上它会改进我的javascript编码,因为它是原始的javascript。
所以现在,我正在为Mobwars facebook编写脚本。这是一个你杀人,偷东西,制造暴徒等等的游戏。
为了更好地理解这一点,这里是页面的屏幕:
alt text http://www.picamatic.com/show/2009/03/18/08/11/2877480_703x486.png 我要做的是扫描页面,获取作业名称并将其显示给用户。
我想获得文章Mugging,House Burglary,Stoplight Car Theft等等
文本的color属性设置为silver。
看看我的代码,我在Firebug中尝试了它,但它甚至没有警告......
var jobs = {};
jobs.scan = function() {
var tagHolder = {};
var availJobs = {};
var jobContents = dom.get("app8743457343_content");
var rData = dom.getElementsByClass(rowData, jobContents, "tr");
for(var i = 0; i < rData.length; i++) {
var rChildren = rData[i].childNodes;
for(var j = 0; j < rChildren.length; j++) {
if(rChildren[j].tagName === "B") {
tagHolder.push(rChildren[j]);
}
}
for(var k = 0; k < tagHolder.length; k++) {
if (tagHolder[k].color == "silver") {
availJobs.push(tagHolder[k].textContent);
}
}
}
return alert(availJobs[0]);
}
jobs.scan();
告诉我这段代码有什么问题。我只是调整一下这段代码,也许如果我设法修复它,就会再次在这里报告。感谢
答案 0 :(得分:2)
你有自定义的“getElementsByClass”功能吗? DOM没有getElementsByClass方法。也许你试图从其他地方借用代码而没有意识到这一点?
互联网上有很多getElementsByClass方法
答案 1 :(得分:1)
+1 Perchik,如果你没有提供你使用的函数的定义,加上它应该运行的html,我们无法真正帮助你检查你的代码。
无论如何,我仍然看到两件你可以改变的事情。第一个是将数组初始化为数组,而不是空对象。如果您的变量不是数组,则无法使用push
方法:
var tagHolder = new Array();
var availJobs = new Array();
第二个是使用jQuery或任何其他可以让您的生活更轻松的JavaScript库。在GreaseMonkey中,您可以使用@require
:
// ==UserScript==
// @name Script Name
// @namespace namespace
// @include http://www.website.net/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
// ==/UserScript==
当您将脚本添加到GreaseMonkey时,检索@required
脚本:如果要使用它,则必须删除脚本并重新加载。然后,GreaseMonkey将保留@required
脚本的本地副本,并在需要时加载它们。
使用jQuery,您的代码将如下所示:
var jobs = {};
jobs.scan = function() {
var tagHolder = new Array();
var availJobs = new Array();
$("#app8743457343_content b").each(function() {
tagHolder.push(this);
if ($(this).attr("color") == "silver")
availJobs.push($(this).text());
});
return alert(availJobs[0]);
}
jobs.scan();
答案 2 :(得分:1)
+1 ybo,鉴于可获得的信息,您的答案是现场。我快速浏览了一下Mob Wars页面中的相关标记,看起来像这样:
<div id="app8743457343_content" fbcontext="db6ca1f1773e">
...
<b style="font-size: 15px; color: silver;">Mugging</b>
...
我根据实际标记将您的解决方案修改为:
// ==UserScript==
// @name Mob Wars Job List
// @namespace namespace
// @description Script to summarise available Mob Wars jobs.
// @include http://apps.facebook.com/mobwars/jobs/
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==
$(document).ready(function() {
var jobs = {};
jobs.scan = function() {
var availJobs = new Array();
$("#app8743457343_content b").each(function() {
if ($(this).css("color") == "silver")
availJobs.push($(this).text());
});
return alert("Available jobs:\n" + availJobs.join('\n'));
}
jobs.scan();
});