0

私は JavaScript の初心者で、単語が Web ページに表示される回数を数える方法がわかりません。

さまざまなフォーラムで調査しましたが、助けがありませんでした。この機能を実現するための提案やヒントをいただければ幸いです。

4

3 に答える 3

3

Greasemonkey スクリプトを使用して単語のインスタンスをカウントする場合は、次の 4 つの点に注意してください。

  1. 正規表現で特殊\b文字, を使用して、実際に単語を取得できるようにします。
    たとえば、/\bof\b/「of」には一致しますが、「offer」には一致しません。

  2. match()プロパティにアクセスする前に 、常に結果が null でないことを確認してください。match(regex).length多くの場合、例外がスローされます。

  3. 不注意なスクリプトが Web ページと相互に干渉する可能性があることに注意してください。 これは、他の回答の1つが機能しなかった理由の一部です。これを回避するには、ディレクティブ
    を指定して、Greasemonkey のサンドボックスをオンに戻します。@grantGM スクリプトはgrant none、多くの状況でデフォルトで使用されるようになりました!

  4. Google などの多くのサイトでは、Greasemonkey スクリプトが実行されてからかなり後にAJAX を介してコンテンツが読み込まれることに注意してください。それを補うための多くの戦略があります。おそらく最も簡単な方法は、タイマーを使用することです。

すべてをまとめると、これらすべての問題を補う完全なスクリプトがここにあります。jsFiddle でコードの動作も確認できます。

// ==UserScript==
// @name     _Show word counts
// @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.
*/
$("body").append ('<div id="gmWordCount"></div>');

checkWordCount ();  //-- Initial run, works for static HTML only.

//--- Check for AJAX loaded words... Over twice a sec is plenty fast.
var wordChkTimer = setInterval (checkWordCount, 444);

function checkWordCount () {
    //--- Search for "of" as a whole word.
    var wordStr     = "of";
    var wordRegex   = new RegExp ("\\b" + wordStr + "\\b", "gi");
    var matchRez    = $(document.body).text ().match (wordRegex);
    var wordCount   = matchRez ? matchRez.length : 0;

    //--- Display the results.
    var countReport = '';
    switch (wordCount) {
        case 0:
            countReport = '"of" was not found!'
        break;
        case 1:
            countReport = '"of" was found one time.'
        break;
        default:
            countReport = '"of" was found ' + wordCount + ' times.'
        break;
    }

    //--- Display results to the user.
    $("#gmWordCount").text (countReport);
}

//--- Position and style the display output,
GM_addStyle ( "                                 \
    #gmWordCount {                              \
        background:         orange;             \
        position:           fixed;              \
        top:                0;                  \
        left:               0;                  \
        width:              100%;               \
        z-index:            6666;               \
    }                                           \
" );
于 2012-12-27T07:48:11.417 に答える
1

これはあなたにとってのスタートです。現状では、他の単語の内部に存在するインスタンスと一致します。たとえば、「coffee」は「of」としてカウントされ、他のページに干渉します。jQueryがすでに存在するかどうかは確認していません。したがって、実際に自分で作業を行う必要があります。

// ==UserScript==
// @name        Count words
// @namespace   count
// @version     1
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js
// ==/UserScript==

$(function(){
    var word='of'; // put your word here
    var regex = new RegExp(word, "gi")
    alert ($('body').text().match(regex).length);
});
于 2012-12-26T08:48:59.490 に答える
0
var text = document.body.textContent
    .replace(/\r?\n?/g, "") // removes lines
    .replace(/\s{2,}/g, " "), // removes duplicate spaces
word = new RegExp("of", "gi");

alert(text.match(word).length);
于 2012-12-26T11:24:37.837 に答える