如何使用变量字符串访问对象?

时间:2011-05-08 11:18:58

标签: javascript html

我有一个名字是壁画的物体。我已将名称mural指定为锚元素的标题。当用户点击和元素时,我想将锚的标题存储在一个名为sprite的变量中。然后我想访问其名称对应于sprite变量字符串的对象。

这是我的代码:

var mural= new Object();
mural.top='0px';
mural.left=-'510px';

var stamps= new Object();
stamps.top='0px';
stamps.left=-'1886px';

var sprite=$(this).attr('title');

$(".image-holder").css("background-position",'sprite.top, sprite.left');

它不起作用,因为变量sprite只是对$(this).attr('title')的引用,我如何让它引用该对象?

哦,我知道.css jquery语句可能无法正常工作,我还不确定是否有正确的方法可以将两个不需要引用的值作为第二个参数。但我主要关注的是访问该对象的方式。

3 个答案:

答案 0 :(得分:2)

使用括号表示法,例如如果stampsmural是全局对象:

var sprite = window[$(this).attr('title')];

JavaScript不解析变量替换的字符串,你必须使用其他已经显示的字符串连接:

.css("background-position", sprite.top + ' ' + sprite.left);

但是根据上下文,也许可以只使用CSS:

.mural {
     background-position: 0px 510px;
}

.stamps {
     background-position: 0px 1886px;
}

JS

$('a').click(function() {
    $(".image-holder").addClass($(this).attr('title'));
});

如果无法做到这一点,我实际上会将两个精灵存储在地图中:

// in some higher scope
var sprites = {
    mural: {
        top: '0px',
        left: '510px'
    },
    stamps: {
        top: '0px',
        left: '1886px'
    }
};

// in your event handler
var sprite = sprites[$(this).attr('title')];

但是如果不了解更多关于背景的信息,很难给出更好的建议。

答案 1 :(得分:0)

编辑:我终于知道你的目标了。请参考Felix Kling的回答(window[$(this).attr("title")]部分。)我认为他满足了你的需要。 : - )


'sprite.top, sprite.left'替换为sprite.top + "," + sprite.left

元素的属性不能存储任何变量,只能存储字符串。

如果您想要动态访问mural对象,只需将sprite从上面替换为壁画。

因此,我假设您希望在单击元素时立即访问壁画对象的数据。

JSON.stringify(mural)并保存到A Element的title属性。

当需要提取时,只需spite = JSON.parse($(this).attr("title"))并获得Object的时间。

除此之外,我建议你将它存储在一个新变量中,而不是将它存储在title属性中,如果我符合你的真实期望。

答案 2 :(得分:0)

使用对象文字更容易(我假设=-是拼写错误):

var mural = {top:'0px', left:'510px'};
var stamps= {top:'0px', left:'1886px'};

var sprite = this.title;

我认为上面会将sprite设置为字符串原语,因此它不太可能有top或left属性,但假设你修复了它并且sprite是一个对象(或也许你打算使用muralstamps),然后:

$(".image-holder").css("background-position", sprite.top +
  ' ' + sprite.left);