Javascript 如何使用变量字符串访问对象?
我有一件名叫壁画的东西。我已将壁画的名称指定给锚元素的标题。当用户单击元素时,我希望将锚的标题存储在一个名为sprite的变量中。然后我想访问名称与sprite变量字符串对应的对象 这是我的密码:Javascript 如何使用变量字符串访问对象?,javascript,html,Javascript,Html,我有一件名叫壁画的东西。我已将壁画的名称指定给锚元素的标题。当用户单击元素时,我希望将锚的标题存储在一个名为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).
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语句可能不起作用,我还不确定两个值的正确方法,它们不需要引用作为第二个参数。但我主要关心的是访问对象的方式。编辑:我终于知道你的目标了。请参考Felix Kling的答案(在
窗口[$(this).attr(“title”)]
部分),我认为他的答案满足您的需要。:-)
将“sprite.top,sprite.left”替换为“
sprite.top+”,“+sprite.left”
元素的属性不能存储任何变量,只能存储字符串
如果您想动态访问壁画
对象,只需从上方将精灵替换为壁画即可
因此,我假设您希望在单击元素时立即访问壁画对象的数据
stringify(mural)并保存到元素的title属性
当需要提取时,只需JSON=JSON.parse($(this.attr(“title”))
并获取对象的时间
除此之外,如果我满足您的实际期望,我建议您将其存储在新变量中,而不是存储在title属性中。使用括号表示法,例如,如果
邮票和壁画
是全局对象:
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
如果不可能,我会将两个精灵都存储在地图中:
// 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')];
但是如果不了解更多的上下文,就很难给出更好的建议。使用对象文字更容易(我假设=-
是一个拼写错误):
我假设上面将sprite
设置为字符串原语,因此它不太可能具有top或left属性,但假设您修复了这一点,并且sprite
是一个对象(或者您可能打算使用mural
或stamps
),那么:
谢谢你知道有关引用对象的任何信息吗?sprite.top当前返回“未定义”。title元素不用于存储数据:(我知道,但它确实描述了锚点中包含的图片。你还建议我怎么做?我想知道一种更好、更有效的方法。只需在样式表中定义它的css?它的css根据单击的内容而变化,这就是为什么我必须通过JS来改变它。非常感谢。我已经给了他们classes on click在样式表中有一个与之关联的样式。非常感谢!
// 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')];
var mural = {top:'0px', left:'510px'};
var stamps= {top:'0px', left:'1886px'};
var sprite = this.title;
$(".image-holder").css("background-position", sprite.top +
' ' + sprite.left);