1
<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”或“lawyer.gif”或其他任何内容的出现分配一个特定值,然后将其乘以 111 IF 律师在页面上,然后将其添加到“医生”乘以 222 IF 医生在页。有很多不同的可能“职业”(约 50 种),所以这里的代码非常简化。一页可能有医生、律师和消防员,而另一页可能只有牙医。然后这个总和应该显示在页面上或弹出窗口或其他任何东西上。这里的 111 和 222 来自代码中括号中的数字,并且这些数字在每一页上都会发生变化。

我计划用greasemonkey/javascript来做这件事,但只是因为我在这方面的经验有限。所以我想我的问题是首先,这是否可能至少有点简单,如果可以,至少有人能给我一些提示让我开始吗?谢谢。

4

1 回答 1

1

一般来说:

  1. 要处理很多事情,请使用数组:[blah1, blah2, etc.]
  2. 要将 ad-hoc 值关联到 ad-hoc 标签,请使用对象:
    [ {blah1: 3.1}, {blah2: 415}, etc.]
  3. 要检测和操作页面上的内容,请使用jQuery
  4. 要向页面添加显示或其他元素,也可以使用 jQuery。

总而言之,这是一个完整的脚本,可以完成您的问题似乎要问的问题。您还可以在 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");
于 2013-01-24T08:45:24.277 回答