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を掛けてから、「doctor」に222IF医者がいる場合はこれを掛けます。ページ。考えられるさまざまな「職業」(〜50)がたくさんあるので、ここのコードは非常に単純化されています。1つのページには医師、弁護士、消防士が含まれ、別のページには歯科医が含まれる場合があります。この合計は、ページやポップアップなどに表示されます。ここでの111と222は、コード内の括弧内の数字に由来し、これらの数字はページごとに異なります。

私はこれをgreasemonkey/javascriptで行うことを計画しましたが、これは私の限られた経験のためだけです。だから私の質問が最初だと思います、これは少なくともいくらか簡単に行うことさえ可能ですか?もしそうなら、誰かが私を始めるためのいくつかのヒントを少なくとも私に与えることができますか?ありがとう。

4

1 に答える 1

1

一般に:

  1. 多くのことを処理するには、配列を使用します。[blah1, blah2, etc.]
  2. アドホック値をアドホックラベルに関連付けるには、オブジェクトを使用します。
    [ {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 に答える