在javascript程序中有一个包含对象的数组(gData) 这些对象中的每一个都有一个名为label的属性,它是一个对象 每个标签在div中包含一个名为span_的span,称为div_。
在其他与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_对象。我的选择器规格错了吗?还是我错过了一些让我感到愚蠢的其他原因?
答案 0 :(得分: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()
一样使用它,包括你的实现示例。
<强>小提琴:强>