2

私はこのようなjavascriptクラスを持っています(技術的にはクラスではないことを知っています)。

function StackMedia (container) {

    this.container = container;
    this.items = container.find('.stackItem');
    console.log("this.items.length: "+this.items.length);

}

cssクラスstackItemを持つ他のdivを保持するコンテナ(div)を渡します。これらは、アイテムに格納されます。

ここで私はそれを再利用したい:

StackMedia.prototype.updatePositions = function() {

     for (var i = 0; i < this.items.length; i++) {
         this.items[i].css('left', 50);
    }
}

問題は、それがjqueryオブジェクトではなくなったため、次のエラーが発生することです。

TypeError:'undefined'は関数ではありません('this.items [i] .css(' left'、50)'を評価しています)

それらをjqueryオブジェクトとして保存するにはどうすればよいですか?


アップデート

ここでクラスを作成します(正常に動作します):

// create a stack by passing a container
    $('.stackContainer').each(function(containerIndex) {
        $(this).css('z-index', containerIndex);
        stacks.push(new StackMedia($(this)));
    });

これは最後の行を除けばほとんど問題ありません

StackMedia.prototype.updatePositions = function() {

    var sm = this; // StackMedia

    // set the css properties of the items
    this.items.each(function(i){
        $(this).css('left', sm.x + i * sm.overlapX);
        $(this).css('top', sm.y + i * sm.overlapY);
        $(this).css('width', sm.itemWidth);
        $(this).css('height', sm.itemHeight);
        $(this).find('img').css('width', sm.itemWidth);
        $(this).find('img').css('height', sm.itemHeight);
    });

    // set the css properties of the container
    //console.log(sm);
    console.log($(this));
    $(this).container.css('width', 400);

};

私はこれを再び取得します:TypeError:'undefined'はオブジェクトではありません('$(this).container.css'を評価しています)

jquery$(this).container機能が失われましたが、どうすれば元に戻すことができますか?

4

4 に答える 4

5

this.itemsjQueryオブジェクトです。for通常のループを使用してループしないでください。jQueryを使用してください.each

this.items.each(function(){
    $(this).css('left', 50);
});

jQueryオブジェクトのすべての要素に影響を与えると確信している.cssので、次のことを実行できます。

this.items.css('left', 50);
于 2012-06-10T18:20:17.063 に答える
0

あなたのdivにはcssクラスstackItemがあるので、それらのdivに簡単にアクセスできます。

$('.stackItem')

このクラスを持つすべてのDIVが返されます。それを試してみてください。

現在、どのコンテナ配列が含まれているかは関係ありません。:) :)

于 2012-06-10T18:18:12.540 に答える
0

アイテム変数を追加するだけではいけませんか?

StackMedia.prototype.updatePositions = function() {
     var item;

     for (var i = 0; i < this.items.length; i++) {
         item = this.items[i];
         $(item).css('left', 50);
     }
}
于 2012-06-10T18:18:55.713 に答える
0

あなたはおそらくそれを次のように書き直すことができます

StackMedia.prototype.updatePositions = function() {
   this.items.css('left', 50);
}
于 2012-06-10T18:20:35.817 に答える