0

ForumotionでPunBBを使用するというアイデアは、ポイントシステムを使用して、表示されるポイントの数をテキストの文字列に置き換えることでした。スパンクラスを使用して、最初に、ユーザーが持っているポイントの数を示すコードの周りにクラス「honorpoints」を定義しました。

<span class="honorpoints"><!-- BEGIN profile_field -->{postrow.displayed.profile_field.CONTENT}<!-- END profile_field --></span>

フォーラムでそのコードを使用すると、ユーザーのポイントに基づいて、ユーザー名の横に番号が表示されます。次のjQueryコードは、番号を置き換えるために使用しようとしたものです。

$(".honorpoints").each(function(){
    var elm = $(this);
    var number = parseFloat(elm.text(), 10);
    if (number >= 1 && number <= 500) {
        state = "rank 1";
    } else if (number >= 500 && number < 3000) {
        state = "rank 2";
    }
    elm.text(state);
});

ただし、これは何もしませんし、数字はまだそこにあります。UserA:234およびUserB:571をUserA:ランク1およびUserB:ランク2に置き換えることになっています。ただし、jsFiddleで使用する場合、および{postrow.displayed.profile_field.CONTENT}コードの代わりに数字のみを使用する場合、コードは機能します。 。ヘルプをいただければ幸いです。

4

2 に答える 2

0

コメントで提供したページのソースを見ると$('.honorpoints').each、ドキュメントが完全に読み込まれる前にメソッドが呼び出されていると思います(99546.js)。何かが足りない場合を除いて、そのメソッドを$(document).ready関数でラップして、DOMの準備ができたときにのみ実行されるようにする必要があります。

$(document).ready(function() {
    $(".honorpoints").each(function(){
        var elm = $(this);
        var number = parseFloat(elm.text(), 10);
        var state = "";
        if (number >= 1 && number <= 500) {
            state = "rank 1";
        } else if (number >= 500 && number < 3000) {
            state = "rank 2";
        }
        elm.text(state);
    });
});

良い習慣なので、変数の宣言も追加しましたstate(現在あなたの質問にあるように、state変数は実際window.stateには以前に宣言されていなかったためです)。

于 2012-08-01T00:40:30.840 に答える
0

次の行は解析"UserA : 234"を試みます。そのため、エラーが発生します。parseFloat(elm.text(), 10);

あなたはあなたifのを修正する必要があります、両方とも一致します500

次のコードを使用して修正できます。

$(".honorpoints").each(function(){
    $(this).text(function(i, text) {
        return text.replace(/\d+$/, function(match) {
            if(match >= 1 && match <= 500) return "rank 1";
            else if(match > 500 && match < 3000) return "rank 2";
        });
    });
});

説明:

$:文字列の終わりに一致します。
\d:数字のみに一致します。
+:一致する回数が1回以上一致するため、一致する可能性が0あり5000000ます。

デモ

参照

于 2012-08-01T00:15:46.750 に答える