0

我有简单的问题,我正在寻找优雅的解决方案。

我的html中有列表。我使用 jquery 将其项目映射到数组中。所以我有对象数组。然后我为每个项目制作了(再次使用 jquery)按钮。所以我有一对,每对都有项目和按钮。

现在让我们假设,我想建立一个结构,它将以某种方式将这些对连接在一起。因此,如果我使用 jquery 选择任何元素,那么我将能够找到与之关联的元素。我仍然有一些想法,但它们看起来太复杂了。我正在寻找设计模式或非常接近它的东西。

HTML结构:

<ul>
    <li>item 1</li>
    <li>item 2</li>
    <li id="active">item 3</li>
</ul>

到目前为止,我的想法在 javascript/jquery 中不起作用(它非常简化):

var list = [];

$('li').each(function() {
    list.push($(this));
    });

// this should be object, that links list items with buttons
var linker = {};

for (var item in list) {
    var button = $('<button>Do something!</button>');

    // this part is crazy O.o
    linker[list[item]] = button;
    linker[button] = list[item];
    // it doesnt work, becouse toString() function make from any of these objects "[object Object]"
}


// Now code like this should be able to find button that belongs to item 3

var active = $('#active')[0];

var result = linker[active];

请告诉我最简单的方法,如何在不触及其属性的情况下将两个对象链接在一起。谢谢你的帮助。

4

1 回答 1

1

如何在不触及其属性的情况下将两个对象链接在一起。

如您所见,作为键值映射的对象不起作用,因为它的键是字符串化的。在未来的 JavaScript 中,您将能够使用 a Map(甚至是WeakMap更适合您的 a),但目前还不可能。但是,您可以使用通过将键和值对象存储在具有对应索引的数组中来工作的Mapshim 。如果您自己实现,您还可以对相同的数组进行反向查找。

于 2013-09-11T11:47:15.840 回答