javascript - JS - 如何获取 map 的正确值?

标签 javascript jquery html

加载时我创建了一个 map ,键是一个 anker 元素,值是那个 anker 的偏移量。不幸的是我无法正确读出 val,它总是返回最后一个键的值。怎么了?

js fiddle

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

Fiddle

您应该只将数据属性用于表示属性和绑定(bind),但这似乎是合适的,这里就是这种情况。

关于javascript - JS - 如何获取 map 的正确值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587419/

相关文章:

javascript - 覆盖动画填充模式 : forwards in JavaScript/CSS

javascript - 从命名函数返回值

Javascript:我如何找到某个类并将带有编号 ID 的 SPAN 添加到每个单词?

html - 响应式图像如何与 `em` 中作为长度提供的 `sizes` 一起使用?

javascript - 带图的 EmberJS 组件

java - 如何将动态参数传递给jquery函数

javascript - 无限循环的数字滚动条,直到按下停止按钮

javascript - 如何使用 javascript 将上传的照片保存到我的 HTML 项目

javascript - React 中的类分配

javascript - 如何使用 Electron 应用程序关闭文件