<img src="http://lawyer.gif" />
<a href="http://lawyer.com">lawyer</a> (111)
或
<img src="http://doctor.gif" />
<a href="http://doctor.com">doctor</a> (222)
所以有多个页面包含类似于上面的html。我想为“律师”或“lawyer.gif”或其他任何事件分配一个特定值,并将其乘以111如果律师在页面上,然后将其添加到“医生”乘以222如果医生在页。有很多不同的可能“职业”(~50),所以这里的代码非常简单。一页可能有医生,律师和消防员,而另一页可能只有牙医。然后应该在页面上或弹出窗口或其他任何内容中显示此总和。这里的111和222来自代码中括号中的数字,这些数字在每页上都有变化。
我计划用greasemonkey / javascript做这个,但仅仅是因为我对此的经验有限。所以我想我的问题是第一,这甚至可能至少在某种程度上是简单的,如果是这样,有人至少可以给我一些提示让我开始吗?感谢。
答案 0 :(得分:1)
一般来说:
[blah1, blah2, etc.]
[ {blah1: 3.1}, {blah2: 415}, etc.]
总而言之,一个完整的脚本可以解决您的问题。您还可以see the code in action at jsFiddle.:
// ==UserScript==
// @name Arbitrary math on arbitrary page values
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
var textToValuesArray = [
{"doctor": 3}
, {"lawyer": 5}
, {"rodeo clown": 7}
// etc.
];
var targetNodes = $("td.left:has(a)");
var targetText = targetNodes.text ();
var reportValue = 0;
//-- Loop through the textToValuesArray.
$.each (textToValuesArray, function (index, textToValueObject) {
var textTerm = Object.keys (textToValueObject)[0];
//-- Is the text term in the targeted part of the page?
var termRegex = new RegExp(textTerm, 'i'); // Case insensitive
if (termRegex.test (targetText) ) {
console.log ("Text '" + textTerm + "' was found!");
/*-- Given the indicated page structure, targetText will look like:
"doctor (2)lawyer (4)" etc.
With the value we want coming one space after the target term
and in parentheses.
So, if we split the string on the search term, we get the next
(number), if any.
*/
var splitStr = targetText.split (termRegex);
if (splitStr && splitStr.length > 1) {
var multiplierString = splitStr[1].replace (/^\s*\((\d+)\).*$/, "$1");
if (multiplierString) {
var multiplierInteger = parseInt (multiplierString, 10);
if (isNaN (multiplierInteger) ) {
console.log ("Multiplier value not found! (2)");
}
else {
/*-- We found a term and we found its multiplier.
Add to the report value.
*/
var termValue = textToValueObject[textTerm];
console.log (
"termValue: ", termValue,
" ",
"multiplierInteger: ", multiplierInteger
);
reportValue += termValue * multiplierInteger
}
}
else {
console.log ("Multiplier value not found! (1)");
}
}
else {
console.log ("Split string error!");
}
}
} );
console.log ("reportValue: ", reportValue);
$("body").prepend ('<div id="gmReport">The final value was: ' + reportValue + '</div>');
$("#gmReport").css ("background", "orange");