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
これを行う他の方法はありますか?