#jquery
#jquery
Вопрос:
Я пытаюсь добавить элементы внутри строки начальной загрузки с данными, полученными из API, поэтому внутри $('CONTAINER').append(
я делал a each()
для каждого элемента в массиве объектов, но вместо этого элементы не добавляются, похоже, что each()
это игнорируется.
я использую this.taglio
, поскольку следующий код находится внутри другого each()
Мой код выглядит так:
$('<div>', {
class: 'row'
}).append(
$.each(this.tagli, function() {
$('<div>', {
class: 'col-md-3'
}).append(
$('<div>', {
class: 'panel panel-default taglio'
}).append(
$('<div>', {
class: 'panel-body'
}).text(this.importo)))
}),
$('<div>', {
class: 'col-md-3'
}).append(
$('<div>', {
class: 'panel panel-default add'
}).append(
$('<div>', {
class: 'panel-body text-center'
}).text(' ')).on('click', function() {
$('#modalAdd').modal()
}))
)
Я использую jquery 2.2.4
И только div вне .каждый добавляется…
Ответ №1:
$.each()
возвращает объект, а не строку HTML, которую можно добавить. Чтобы устранить проблему, вы можете изменить логику, используемую map()
для создания строки HTML, примерно так:
let html = this.tagli.map(function(o) {
return '<div class="col-md-3"><div class="panel panel-default taglio"><div class="panel-body">' o.importo '</div></div></div>';
});
let $row = $('<div class="row" />').html(html);
$('<div class="col-md-3"><div class="panel panel-default add"><div class="panel-body text-center"> </div>').appendTo('#someElement');
$('#someElement').on('click', '.panel-body', function() {
console.log('element clicked');
});
$('#modalAdd').modal()
Обратите внимание, что, поскольку в JS так много HTML, вы можете вместо этого рассмотреть создание скрытых элементов шаблона в DOM, которые вы clone()
и исправляете в своем цикле перед добавлением в DOM.
Комментарии:
1. Как я могу это сделать, не используя функцию стрелки? я пытался сделать что-то вроде
this.tagli.map(function(taglio) { return $('<div>')... })
, но это не работает, в то время как с функцией стрелки это работает.. (я должен позволить ему работать на IE9 ..)2. Никаких проблем, я только что обновил ответ, чтобы использовать анонимные функции вместо функций со стрелками
3. работает ли анонимная функция
.map()
только со строкой? потому что я пытался использовать то же решение,this.tagli.map(function (o) { return $('<div>', { class: 'col-md3' }).append($('<div>', { class: 'panel panel-default taglio' }).append($('<div>', { class: 'panel-body text-center' }).text(o.importo)));})
но оно не работает4. в то время как, если я просто изменю
function (o) { return
witho =>
, он будет работать так, как нужно5. он работает, но только с функцией стрелки, которую я должен избегать использовать, поскольку она не поддерживается в IE9..