有没有一种将JavaScript对象附加到HTML元素的好方法?

有没有一种将JavaScript对象附加到HTML元素的好方法?,javascript,dom,Javascript,Dom,我想将JavaScript对象与HTML元素相关联。有没有一个简单的方法可以做到这一点 我注意到定义了一个setAttribute方法,看起来它是为任意属性名定义的。但是,这只能设置字符串值。(当然,您可以使用它将键存储到字典中。) 细节(尽管我最感兴趣的是一般性问题): 具体地说,我有表示树中节点的HTML元素,我正在尝试启用拖放,但是jQuery拖放事件只会给我正在拖放的元素 向事件处理程序获取信息的正常模式似乎是在创建JavaScript对象的同时创建HTML元素,然后通过关闭这些Java

我想将JavaScript对象与HTML元素相关联。有没有一个简单的方法可以做到这一点

我注意到定义了一个setAttribute方法,看起来它是为任意属性名定义的。但是,这只能设置字符串值。(当然,您可以使用它将键存储到字典中。)

细节(尽管我最感兴趣的是一般性问题):

具体地说,我有表示树中节点的HTML元素,我正在尝试启用拖放,但是jQuery拖放事件只会给我正在拖放的元素


向事件处理程序获取信息的正常模式似乎是在创建JavaScript对象的同时创建HTML元素,然后通过关闭这些JavaScript对象来定义事件处理程序——但是在这种情况下,这并不太有效(我可以有一个全局对象,在拖动开始时填充它……但这感觉有点不舒服)。

你看过这个方法吗?如果你愿意,你可以将复杂的对象分配给元素,或者你可以利用这个方法来保存对对象(或其他数据)的引用至少。

JavaScript对象可以具有分配给它们的任意属性,您不需要做任何特殊的事情来允许它。这包括DOM元素;虽然这种行为不是DOM标准的一部分,但它可以追溯到JavaScript的最早版本,并且是完全可靠的

var div= document.getElementById('nav');
div.potato= ['lemons', 3];

谢谢:这正是我想要的。有趣的是,要定义这个方法,jquery会在每个元素上的字符串属性中将键存储到全局字典中。这个字符串属性的名称是在首次加载jquery时随机生成的。(暗示没有更好的方法,也没有更好的方法只使用DOM)值得注意的是,jQuery的
data()
是通过使用来工作的,所以如果你还没有使用jQuery,你也可以使用它。有趣的是,我可以在6年后回顾这个答案并思考,“这是一个非常次优的答案。@bobince应该有一个可接受的答案”。这个问题中没有jQuery标记。@tat.wright-他所说的HTML元素上的任意属性称为Expando属性。还要注意div.potato并不意味着div.getAttribute(“potato”)@Tim Down:那就不要这样做。我不明白为什么它不可靠-这就像说String对象不可靠,因为你可以将它设置为null。@TimDown:但是设置
document.expando=false
break也不会吗?根据我的经验,这可能是不好的原因,可能是内存泄漏。有一种简单的方法可以避免它,但是,当我设计一个大量使用这个元素的设计时,它有很多内存泄漏。我认为你必须格外小心,因为如果元素从页面中删除,引用计数就不会为你处理(没有清理),很可能是visa-versa。公平警告:我很高兴按照答案所描述的做,而不是字段名“土豆”“我使用的是“scope”。结果表明,“scope”是表单元格元素(
)的一个属性,并且我分配给这个字段的对象是#toString'ed。看到td.scope===”[object object]',我非常困惑。