【发布时间】:2013-02-15 06:13:47
【问题描述】:
我在 n 行上使用事件委托,我的旧方法是将每一行与事件绑定,代码看起来像这样:
function getDiv (data) {
var div = $("<div class='theDiv'>");
div.click(function () {
console.log(data);
});
return div;
}
function getContainer() {
var i, container;
container = $("<div class='container'></div>");
for (i = 0 ; i < 1000 ; i++) {
container.append(getDiv(i));
}
return container;
}
$("body").append(getContainer());
注意:在这种方法中,每个行元素 (theDiv) 都可以访问它们的数据。
现在的问题是,我想绑定单击 container 并访问数据,事件委托方法如下所示:
function getNewDiv (data) {
var div = $("<div class='theDiv'>");
return div;
}
function getNewContainer() {
var i, container;
container = $("<div class='container'></div>");
for (i = 0 ; i < 1000 ; i++) {
container.append(getNewDiv(i));
}
container.click (function (e) {
var targetElem = e.target;
console.dir(e);
if ($(targetElem).hasClass("theDiv")) {
console.log("row was clicked");
}
})
return container;
}
$("body").append(getNewContainer());
现在,如何访问与每一行关联的数据?
根据我的学习: 我可以将数据添加到
- data-*,但这会限制我使用简单的数据类型
- $.data 关联到元素
还有其他方法吗?
【问题讨论】:
标签: javascript performance dom-events event-delegation