Javascript 将元素另存为对象中的索引

Javascript 将元素另存为对象中的索引,javascript,object,Javascript,Object,我想在对象中保存一个DOM元素。但不是作为值,我希望将其保存为对象的键。但我认为javascript的核心无法做到这一点 data={} data[$('div#a')] = 'A'; data[$('div#b')] = 'B'; console.log(data[$('div#a')]); //return B 您知道如何将元素保存在索引对象中吗 假设我的文档中有XXXXXX元素。如果我想在某个事件发生时访问元素属性,我不想迭代XXXXXX元素来找到它 为什么我不使用jquery的数据有

我想在对象中保存一个DOM元素。但不是作为值,我希望将其保存为对象的键。但我认为javascript的核心无法做到这一点

data={}
data[$('div#a')] = 'A';
data[$('div#b')] = 'B';
console.log(data[$('div#a')]); //return B
您知道如何将元素保存在索引对象中吗


假设我的文档中有XXXXXX元素。如果我想在某个事件发生时访问元素属性,我不想迭代XXXXXX元素来找到它

为什么我不使用jquery的数据有两个原因:

  • 我想在本机javascript上实现这一点
  • 我不想让另一个数组迭代elementid中的独立数据

  • 因此,最好的方法是只有一个对象,其键上的元素可以轻松访问它们。如果我想迭代它们,我只需要在数据中为i执行操作

    JavaScript对象将只接受字符串作为键,如果您尝试使用任何其他项作为键,JS将使用
    .toString()
    ,通常会导致所有内容都存储在(单个)键
    “[对象]”

    是否有任何原因不能将与该元素关联的数据直接存储在该元素上

    否则,假设每个这样的元素都有一个ID,只需使用元素ID作为对象键


    注意:ES6有一个可以使用的
    Map
    对象,但这只是当前浏览器中的一个实验特性。但是,即使这样,您也必须使用实际元素作为键,而不是jQuery包装的
    $(元素)
    对象,因为
    $('#a')!==$(“#a”)
    -每次访问映射时,必须使用完全相同的原始jQuery对象,而不是新构造的对象。

    Javascript对象只接受字符串作为键


    所以,如果您试图给出字符串以外的键值,javascript将在内部调用该对象的.toString()方法,并将其返回值用作键。

    对象键必须是stings

    您可以使用
    data
    方法将任何内容关联到元素:

    $('div#a').data('name', 'A');
    $('div#b').data('name', 'B');
    console.log($('div#a').data('name')); //return B
    

    为什么不将元素的
    id
    属性存储为键呢?无论如何,ID将是唯一的。听起来像是“XY问题”…因为有些元素没有ID@stevantage。DOM的元素有一些本机唯一ID?不,它们没有任何唯一ID。是否可以为这些元素分配唯一ID以使生活更轻松?我想使用本机javascript。正确,元素转换为字符串,保存的索引始终为“[object HTMLInputElement]”