加载时我创建了一个 map ,键是一个 anker 元素,值是那个 anker 的偏移量。不幸的是我无法正确读出 val,它总是返回最后一个键的值。怎么了?
HTML
<a>Anker</a><a>Anker</a><a>Anker</a>
JS
var ankers = {};
$('a').each(function(){
var pos = $(this).offset().left;
ankers[$(this)] = pos;
});
$('a').click( function(e) {
e.preventDefault();
alert(ankers[$(this)]);
});
最佳答案
您在此处用于 map 的 JavaScript 对象仅支持字符串键(与大多数其他语言中的对象一样)。
如果你想要一个实际的 map 应该使用 Map
如果您想使用对象键,则改为对象 - 但这些仅适用于新浏览器,您可以(polyfill it though):
var ankers = new Map();
$('a').each(function(){
var pos = $(this).offset().left;
ankers.set($(this), pos);
});
$('a').click( function(e) {
e.preventDefault();
alert(ankers.get($(this));
});
Fiddle (基于 dfsq 的)
或者,您可以使用元素的 ID 作为键并为它们指定 ID。或者,您可以完全避免这种情况并将数据保存在对象上而不是 map 中:
$('a').each(function(){
$(this).data("anker", $(this).offset().left);
});
$('a').click( function(e) {
e.preventDefault();
alert($(this).data("anker");
});
您应该只将数据属性用于表示属性和绑定(bind),但这似乎是合适的,这里就是这种情况。
关于javascript - JS - 如何获取 map 的正确值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587419/