2

JavaScript プログラムには、オブジェクトを含む配列 (gData) があります。
これらの各オブジェクトには、オブジェクトである label と呼ばれるプロパティがあります。
各ラベルには、div_ という div 内に span_ というスパンが含まれています。

他の gData 関連操作の中で、ラベル オブジェクトは次のようにインスタンス化されます。

gData.label = new Label();

次に、gData オブジェクトが gData 配列にプッシュされます。

メイン プログラムでは、正常に動作する次の jquery コードを実行できます。

$(gData[0].label.span_).css("border","5px solid green");

関数プロトタイプを setCSS() というラベル オブジェクトに追加したいと考えています。次のように setCSS メソッドを呼び出します。

gData[0].label.setCSS("border","5px solid green");

私が書いた setCSS コード (以下) が機能しません。セレクターが機能していないと思います。

Label.prototype.setCSS = function(args) {

// args contains an object in the form {"cssAtribute":"cssData"}
// call this method as label.setCSS({"border":"3px solid blue"});
// Any number of css attributes can be included in the args object

    $.each(args, function(theKey, theValue) {
        $(this.span_).css(theKey, theValue);
    });
}

$(this.span_)、$(this.div.span_)、および他のいくつかのセレクターを試しましたが、どれも機能しません。

Firebug を使用すると、gData[0] にラベル オブジェクトが含まれ、ラベル オブジェクトに span_ オブジェクトが含まれていることがわかります。セレクターの仕様が間違っていますか? または、私がばかげていると感じる他の原因を見逃したことがありますか?

4

1 に答える 1

4

this内部のjQuery.eachスコープは異なります。最初にローカル変数に保存する必要があります。

var $span = $(this.span_);
$.each(args, function(theKey, theValue) {
    $span.css(theKey, theValue);
});

.setCSS("border","5px solid green");このメソッドでは、引数がキー/値を使用するオブジェクトである必要があるため、このメソッドは機能しないことに注意してください。

ただし、メソッドを次のように簡略化できるはずです。

Label.prototype.setCSS = function() {
    $.prototype.css.apply($(this.span_), $.makeArray(arguments));
};

.css()そうすれば、実装例を含め、jQueryが使用するのと同じように使用できます。

フィドル:

最初の例: http: //jsfiddle.net/ESrSY

2番目の例:http://jsfiddle.net/UpEPK

于 2012-05-25T07:57:04.950 に答える