2012-05-25 35 views
2

在一個javascript程序中有一個包含對象的數組(gData)。
這些對象中的每一個都有一個名爲label的屬性,它是一個對象。
每個標籤都包含一個稱爲span_的跨度,稱爲div_。使用這個。在一個jQuery選擇器

除其他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

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)); 
}; 

這樣,你可以用同樣的方式jQuery使用.css()包括你實現的例子。

小提琴:

第一個例子:http://jsfiddle.net/ESrSY

第二個例子:下面http://jsfiddle.net/UpEPK

+0

代碼,每次你的建議ammended,仍然無法正常工作。 'var $ span = $(this.span_); (theKey,theValue)$ span.css(theKey,theValue); });' – RoyHB

+0

第一個示例在這裏工作:http://jsfiddle.net/ESrSY/和第二個例如這裏:http://jsfiddle.net/UpEPK/ – David

+0

你的第二個例子很好 - 感謝您的幫助。 – RoyHB