Получить атрибут данных из нового HTML-элемента, только что добавленного с помощью Jquery

#javascript #html #jquery #dom #attributes

Вопрос:

Только что добавил новый элемент в свой HTML-код с помощью jquery .html(), но не могу получить атрибут данных из этого нового элемента.

Иллюстрация:

 <div class="row" id="append">
  <div class="col-12" id="newElement">
    <button>Add new element</button>
  </div>
  <div class="col-md-3 see-id">
    <button data-id="0.901065887770927">Check ID</button>
  </div>
</div>
<script>
  $(document).ready(function(){
    $('.see-id').click(function(){
      alert($(this).data('id'));
    })
    $('#newElement').click(function(){
      var rand = Math.random();
      $('#newElement').after('<div class="col-md-3 see-id"><button data-id="' rand '">Check ID</button></div>');
    })
  })
</script>
 

Как получить атрибут данных из нового элемента, только что добавленного с помощью DOM?

Ответ №1:

Поскольку вы добавляете новый HTML в документ, вам необходимо использовать делегирование событий для получения данных. В данном случае присоедините прослушиватель к родительскому элементу .row . Но вам также необходимо настроить таргетинг на кнопку, поэтому ваш селектор должен быть .see-id button .

Примечание: я выделил HTML, чтобы запрос мог работать лучше. Новые кнопки добавлялись перед предыдущими в .row div, что могло привести к вводящим в заблуждение результатам при нажатии на них. В этом примере я использую append вместо.

 $(document).ready(function() {

  $('.row').on('click', '.see-id button', function () {
   const id = $(this).data('id');
   console.log(id);
  });

  $('#newElement').on('click', function () {
    const rand = Math.random();
    $('.row').append(`<div class="col-md-3 see-id"><button data-id="${rand}">Check ID</button></div>`);
  });

}); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="newElement">
  <button>Add new element</button>
</div>
<div class="row"></div> 

Комментарии:

1. Замечательно, спасибо. Очень признателен