2

これは当たり前のことかもしれませんが、正直に言うと、私はどんな種類の開発者でもありません。私が働いている会社の顧客のために何かを働かせようとしているだけの人.

JS で定義された配列を取得しました。配列内の各項目に対して for ループを使用してコードのセクションを実行できるようにしたいと考えています。

コードを個別に (つまり、ループではなく) 実行すると、動作することがわかります。ループに入れようとするとすぐに失敗します。ここにいる誰かが、私が間違っていること、なぜ間違っているのか、どうすれば正しくできるかを教えてくれることを願っています。(私の意見では、これらのことを知っている方が常に良いので、私が何を/なぜしているのかを理解できるようにしたいと思います)。

私が持っている(動作する)JS/JQueryコードは次のとおりです。

var a = document.getElementById('roomthumb_2236');
var d = $("#chosenrate_2236").offset();

if ($('#chosenrate_2236').length) {
    a.style.visibility='visible';

    $("#roomthumb_2236").css({
        top: d.top -9 + "px",
        left: d.left + 560 + "px",
    })
};

これは問題なく動作します (JS と JQuery のマッシュアップがあることは知っていますが、後で標準化できます)。

「for」ループのさまざまなバリエーションを試しましたが、うまくいかないようです。これが私の「for」コードの最新バージョンです。

var rooms_array = [2236, 2235]

var reposition = function (){
    document.getElementById('hidden_stuff').style.display="none";

    for (var i = 0; i < rooms_array.length; i++) {
        var a = "roomthumb_"+rooms_array[i];
        var b = "chosenrate_"+rooms_array[i];
        var c = "chosenrate_"+rooms_array[i].offset()

        if ($(b).length) {
            $(a).css({
                visibility:"visible",
                top: c.top -9 + "px",
                left: c.left + 560 + "px",
            })
        };
    };
};

コードがすべきこと (明確でない場合) は次のとおりです。

  • 配列を設定します (これは、データベースから動的に作成された ID のリストです)
  • div「hiddenstuff」を非表示にします(これは正常に機能します)
  • 次に、配列の各 ID に対して。
    • a という変数「roomthumb_xxxx」(xxxx は配列の ID)を作成します。
    • bという変数「chosenrate_xxxx」(xxxxは配列のID)を作成します
    • 変数 b と一致する ID を持つ要素が存在するかどうかを確認し、存在する場合は、変数 a の ID を持つ要素の css プロパティを編集します。

var c は var b の位置を取得する必要があります (私が正しければ)、var a の ID を持つ要素を相対的に配置できるようにします...

コードがループ内で失敗する理由がわかりません。常に null エラーが発生するように見えますか、それとも var b が未定義であると思われますか?

私の推測では、文字列 (chosenrate_) を取り、それに配列文字列を追加して、その結果を ID として使用することはできません。alert(a) または alert(b) を使用すると、必要な ID を取得できますが、たとえば $("#ID") でそれを使用する方法がわかりません...

私はすべてを説明したと思います。私が何かを逃した場合は、それをよりよく説明しようとします。

4

4 に答える 4

3

あなたが試すことができます

var a = "#roomthumb_"+rooms_array[i]; // put # sign for id selector
var b = "#chosenrate_"+rooms_array[i];
var c = $("#chosenrate_"+rooms_array[i]).offset();

次のように書くこともできますvar c

var c = $(b).offset(); // where var b = "#chosenrate_"+rooms_array[i];

現在試していることの代わりに。

あなたが指摘しようとしているidように、最初に必要です#

于 2012-07-08T16:41:47.647 に答える
0

そうです、文字列を連結して jQuery セレクターを作成できます。ざっと見てみると、問題はおそらく の値であることがわかりますc。また、セレクターの先頭からハッシュが欠落しています。これを置き換えます:

var c = $("chosenrate_" + rooms_array[i]).offset()

と:

var a = "#roomthumb_" + rooms_array[i];
var b = "#chosenrate_" + rooms_array[i];
var c = $("#chosenrate_" + rooms_array[i]).offset()
于 2012-07-08T16:42:59.480 に答える
0

セレクターを書く際に間違ったことをしています。あなたの質問によると、$(“#var+array_value”)これは$(“#"+var+array_value)

于 2012-07-08T16:45:38.527 に答える
0

このコードに似たものがあなたのために仕事をすると思います:

// Your array with data.
var rooms_array = [2235, 2236, 2237, 2238];
var reposition = function (){
    // Hide whatever you need to hide.
    $('#hidden_stuff').attr('display', "none");
    // This is a jQuery function to iterate over arrays.
    $.each(rooms_array, function(key,value){
        // Create your "a" variable
        var a = '#roomthumb_'+value;  // roomthumb_2235  ; roomthumb_2236 ...
        var b = '#chosenrate_'+value; // chosenrate_2235 ; chosenrate_2236 ...

        // If b exists...
        if ($(b).length) {
            var c = $(b).offset(); // get the offset of "b"
            $(a).css({
                visibility:"visible",
                top: c.top -9 + "px",
                left: c.left + 560 + "px"
            })
        }
        // if "b" doesn't exist
        else {
            // edit the css properties of the element with the ID of variable "a"
        }
    });
};
于 2012-07-08T17:07:53.077 に答える