Я использую делегирование событий для 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, связанный с элементом
Есть ли другой способ сделать это?