Я пытаюсь получить значение данных из тега <li data-nid="1">. Список <li> генерируется из ответа на запрос Ajax.

$.each(data.notifications.detail,function(index, element){
$('#notifications_list').append('<li id="element" data-nid ='+element.id+'><a>'+element.texte+'</a></li>');
});

Чтобы восстановить значение, я попробовал следующий метод:

var array = new Array();
  $( "#element").each(function() {
        var id = $( this ).data( "nid" );
        array.push(id);
   });

Но я всегда получаю только один элемент, и он всегда первый. Так что, может, кто-нибудь прояснит мне ситуацию.

3
KubiRoazhon 12 Май 2016 в 11:18

3 ответа

Лучший ответ

Во-первых, у вас не может быть нескольких элементов с одним и тем же id, поэтому смысл использования each() в селекторе id полностью избыточен. Вам следует изменить id на class.

Чтобы создать массив значений из добавленных элементов, вы можете просто использовать map(). Попробуй это:

$.each(data.notifications.detail, function(index, element){
    $('#notifications_list').append('<li class="element" data-nid="' + element.id + '"><a>' + element.texte + '</a></li>');
});

var array = $(".element").map(function() {
    return $(this).data("nid");
}).get();

Также обратите внимание, что вы можете создать массив значений в том же цикле each(), когда вы добавляете новые элементы li, например:

var array = [];
$.each(data.notifications.detail, function(index, element){
    array.push(element.id);
    $('#notifications_list').append('<li class="element" data-nid="' + element.id + '"><a>' + element.texte + '</a></li>');
});
2
Rory McCrossan 12 Май 2016 в 08:23

HTML-идентификатор должен быть уникальным. Вы можете отфильтровать с помощью родительского элемента <ul>, а затем использовать children() или filter('li')

$("#notification_list").children().each(function() {
    var id = $( this ).data( "nid" );
    array.push(id);
});
0
clemens321 12 Май 2016 в 08:22

Поскольку id уникален, используйте class, и он будет работать нормально.

0
Naqash Malik 12 Май 2016 в 08:22